将字符串项转换为指标

时间:2014-07-13 06:32:04

标签: r

输入是:

data.frame(rbind(c("3,2,98"),c("5,3,1")))

想要的输出表是

    3  2  98  5  1
1.  1  1   1  0  0
2.  1  0   0  1  1

有什么建议吗?

1 个答案:

答案 0 :(得分:4)

如果您的数据与您在问题(字符串)中显示的内容非常相似,我建议{" splitstackshape"}中的concat.split.expanded。包(开发版)。

以下是您获得礼包的方式:

library(devtools)
install_github(repo = "splitstackshape", username = "mrdwab", ref = "devel")
library(splitstackshape)

这是您的数据。我添加了一个比您在问题中分享的更好的变量名称。

X <- data.frame(V1 = rbind(c("3,2,98"),c("5,3,1")))

这是分裂步骤。如果您不想保留原始列,请添加drop = TRUE

concat.split.expanded(X, split.col = "V1", sep = ",", 
                      type = "character", fill = 0)
#       V1 V1_1 V1_2 V1_3 V1_5 V1_98
# 1 3,2,98    0    1    1    0     1
# 2  5,3,1    1    0    1    1     0

如果您的数据更像以下内容:

X2 <- data.frame(matrix(c(3, 2, 98, 5, 3, 1), nrow = 2, byrow = TRUE))
X2
#   X1 X2 X3
# 1  3  2 98
# 2  5  3  1

...然后可以使用table方法(与stack结合使用):

table(cbind(rn = sequence(nrow(X2)), stack(X2))[c("rn", "values")])
#    values
# rn  1 2 3 5 98
#   1 0 1 1 0  1
#   2 1 0 1 1  0