r - 拆分一列用逗号分隔的数据,并将输出重新编码为因数

标签 r split

我正在尝试清除一些错误输入的数据。变量的问题允许从五个选择中选择多个答案,编号为1到5。已按照以下方式输入数据(这只是一个示例-实际数据中有更多的变量和更多的观察结果框架):

data
          V1
1    1, 2, 3
2    1, 2, 4
3 2, 3, 4, 5
4    1, 3, 4
5    1, 3, 5
6 2, 3, 4, 5

这是一些代码来重新创建示例数据:
data = data.frame(V1 = c("1, 2, 3", "1, 2, 4", "2, 3, 4, 5", 
                         "1, 3, 4", "1, 3, 5", "2, 3, 4, 5"))

我真正需要的是要被更多地对待的数据...二进制数据-就像一组“是/否”问题一样-进入了一个看起来像这样的数据帧:
data
    V1.1  V1.2  V1.3  V1.4  V1.5
1      1     1     1    NA    NA
2      1     1    NA     1    NA
3     NA     1     1     1     1
4      1    NA     1     1    NA
5      1    NA     1    NA     1
6     NA     1     1     1     1

目前,实际的变量名称无关紧要,我可以轻松地解决它。同样,丢失的元素是“O”,“NA”还是空格也没有太大关系,同样,我以后可以修复此问题。

我已经尝试过使用transform包中的reshape函数以及strsplit来填充其他内容,但是我却无法做自己想要的事情。
我也查看了关于Stackoverflow的许多其他相关问题,但它们似乎并不是一个完全相同的问题。

最佳答案

您只需要编写一个函数并使用apply即可。首先是一些伪数据:

##Make sure you're not using factors
dd = data.frame(V1 = c("1, 2, 3", "1, 2, 4", "2, 3, 4, 5", 
                         "1, 3, 4", "1, 3, 5", "2, 3, 4, 5"), 
                     stringsAsFactors=FALSE)

接下来,创建一个接受一行并根据需要进行转换的函数
make_row = function(i, ncol=5) {
  ##Could make the default NA if needed
  m = numeric(ncol)
  v = as.numeric(strsplit(i, ",")[[1]])
  m[v] = 1
  return(m)
}

然后使用apply并转置结果
t(apply(dd, 1, make_row))

关于r - 拆分一列用逗号分隔的数据,并将输出重新编码为因数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10100887/

相关文章:

python - 如何在 Python 中第一次出现字母时拆分字符串?

java - 使用java中的split读取 ""之后和 "("之前的字符串

R Shiny DT::renderDataTable 被覆盖的 "Processing..."横幅卡住

r - 结合 mutate(across) 和 case_when 根据条件用 0 填充多列

Java分割字符串来获取值

java - 如何使用 Java 拆分 sql 查询

javascript - 用于捕获逗号分隔值的正则表达式

linux - 合并 data.frames 导致内存不足错误

r - 通过 ID 和 R 中的某个因子分布创建一个随机子样本

r - 损坏的 Rmarkdown 脚本 : How can I get the Cyrillic characters back?