R:在字符串

时间:2015-11-19 13:46:14

标签: r dataframe

我是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所在的向量列表上工作。

1 个答案:

答案 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))