我是 R 初学者。我有一个像 foo
的数据框
a b c
"a" 1.0 1
"b,c" 0.9 2
"a,b" 0.8 3
目前,我只对 foo$a
列感兴趣。我需要做的是计算 foo$a 中每个可能条目的排名。
我已经做到了
foo$a <- strsplit(foo$a, ",", fixed=T)
为了获取这些条目的列表。我知道只存在 9 个可能的条目,我将它们存储在向量 entries
中。
我想为 entries
中的每个可能条目向 foo
添加一列,并在 foo$a
中保存该条目的索引。对于上面给出的示例,我想要的输出是:
a b c rankA rankB rankC
"a" 1.0 1 1 NA NA
"b,c" 0.9 2 NA 1 2
"a,b" 0.8 3 1 2 NA
R 中是否有内置函数可供我使用以实现该目标?
我尝试了 match
和 %in%
,但到目前为止我无法弄清楚如何让它们在向量列表上工作,其中 foo $a
是。
最佳答案
你可以这样做:
L = strsplit(as.character(df[,1]),',')
vals = unique(unlist(L))
newNames = paste0('rank', vals)
cbind(df, `colnames<-`(do.call(rbind, lapply(L, match, x=vals)), newNames))
# a b c ranka rankb rankc
#1 a 1.0 1 1 NA NA
#2 b,c 0.9 2 NA 1 2
#3 a,b 0.8 3 1 2 NA
数据:
df = structure(list(a = structure(c(1L, 3L, 2L), .Label = c("a", "a,b",
"b,c"), class = "factor"), b = c(1, 0.9, 0.8), c = 1:3), .Names = c("a",
"b", "c"), class = "data.frame", row.names = c(NA, -3L))
关于R:检索字符串向量列表中字符串的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33805677/