我有一个调查中的多项 Select 问题的数据.该列包含以逗号分隔的字符串形式的值.我的数据帧看起来像这样:

       ID       Var
1   1   3,12,14,15,16,18,20,21          
2   2   3,14,20     
3   3   3,14,16     
4   4   3,12        
5   5   3,6,14,15,17,20

我想把这些值拆分到它们各自的列中,例如第1列中的1s,第2列中的2s等.总共有21个值.

我try 使用str_split_fixed,它按照值出现的顺序将值拆分为多个列:

str_split_fixed(df$Var, ",", 21)

      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
 [1,] "3"  "12" "14" "15" "16" "18" "20" "21" ""   ""    ""    ""    ""    ""   
 [2,] "3"  "14" "20" ""   ""   ""   ""   ""   ""   ""    ""    ""    ""    ""   
 [3,] "3"  "14" "16" ""   ""   ""   ""   ""   ""   ""    ""    ""    ""    ""   
 [4,] "3"  "12" ""   ""   ""   ""   ""   ""   ""   ""    ""    ""    ""    ""   
 [5,] "3"  "6"  "14" "15" "17" "20" ""   ""   ""   ""    ""    ""    ""    "" 

我也试过使用cSplit,它产生了类似的结果:

cSplit(df, "Var", ",")

ID    Var_01  Var_02  Var_03  Var_04  Var_05  Var_06  Var_07  Var_08  Var_09...
1   3   12  14  15  16  18  20  21  NA  
2   3   14  20  NA  NA  NA  NA  NA  NA  
3   3   14  16  NA  NA  NA  NA  NA  NA  
4   3   12  NA  NA  NA  NA  NA  NA  NA  
5   3   6   14  15  17  20  NA  NA  NA  

我想制作这样的作品:

ID    Var_01  Var_02  Var_03  Var_04  Var_05  Var_06  Var_07  Var_08  Var_09...
1   NA  NA  3   NA  NA  NA  NA  NA  NA  
2   NA  NA  3   NA  NA  NA  NA  NA  NA  
3   NA  NA  3   NA  NA  NA  NA  NA  NA  
4   NA  NA  3   NA  NA  NA  NA  NA  NA  
5   NA  NA  3   NA  NA  6   NA  NA  NA

我仍然在研究R,所以任何指点都会非常感激.谢谢你,谢谢

推荐答案

base R

V <- strsplit(df$Var, ",") |> lapply(as.integer)
V2 <- cbind(rep(seq_along(V), times = lengths(V)), unlist(V))
m <- data.frame(matrix(NA, nrow = nrow(df), ncol = max(unlist(V))))
colnames(m) <- sprintf("Var_%02d", 1:max(unlist(V)))
m[V2] <- V2[,2]
cbind(df, m)
#   ID                    Var Var_01 Var_02 Var_03 Var_04 Var_05 Var_06 Var_07 Var_08 Var_09 Var_10 Var_11 Var_12 Var_13 Var_14 Var_15 Var_16 Var_17 Var_18 Var_19 Var_20 Var_21
# 1  1 3,12,14,15,16,18,20,21     NA     NA      3     NA     NA     NA     NA     NA     NA     NA     NA     12     NA     14     15     16     NA     18     NA     20     21
# 2  2                3,14,20     NA     NA      3     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     14     NA     NA     NA     NA     NA     20     NA
# 3  3                3,14,16     NA     NA      3     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     14     NA     16     NA     NA     NA     NA     NA
# 4  4                   3,12     NA     NA      3     NA     NA     NA     NA     NA     NA     NA     NA     12     NA     NA     NA     NA     NA     NA     NA     NA     NA
# 5  5        3,6,14,15,17,20     NA     NA      3     NA     NA      6     NA     NA     NA     NA     NA     NA     NA     14     15     NA     17     NA     NA     20     NA

[-索引(对于矩阵和框架)接受包含row,column个索引的2列矩阵,用于提取和赋值,这就是我们对m[V2]所做的.

R相关问答推荐

使用ggcorrplot在相关性矩阵上标注supertitle和index标签

使用R的序列覆盖

如何使用R Shiny中的条件面板仅隐藏和显示用户输入,同时仍允许运行基础计算?

R箱形图gplot 2 4组但6个参数

terra nearest()仅为所有`to_id`列返回NA

derrr mutate case_when grepl不能在R中正确返回值

然后根据不同的列值有条件地执行函数

将嵌套列表子集化为嵌套列表

R—将各种CSV数字列转换为日期

我正在努力用R计算数据集中的中值逐步距离

无法定义沿边轨迹的 colored颜色 渐变(与值无关)

自动STAT_SUMMARY统计与手动标准误差之间的差异

如何在ggplot2中创建多个y轴(每个变量一个)

优化从每个面的栅格中提取值

为什么我对圆周率图的蒙特卡罗估计是空的?

错误包arrowR:READ_PARQUET/OPEN_DATASET&QOT;无法反序列化SARIFT:TProtocolException:超出大小限制&Quot;

如何在使用因子时获得Sankey图的Scale_Fill_Viridis的全范围

把代码写成dplyr中的group_by/摘要更简洁吗?

Ggplot2:添加更多特定 colored颜色 的线条

在具有条件的循环中添加行