我是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
中。
我想为foo
中的每个可能条目添加一列entries
,并在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
所在的向量列表上工作。
答案 0 :(得分:3)
你可以这样做:
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))