在R中拆分多列

恩索

我有以下数据框:

olddf <- structure(list(test = structure(1:6, .Label = c("test1", "test2", 
"test3", "test4", "test5", "test6"), class = "factor"), month0_gp1 = c("163±28", 
"133±20", "177±29", "153±30", "161±31", "159±23"), month0_gp2 = c("122±17", 
"167±20", "146±26", "150±27", "148±33", "161±37"), month1_gp1 = c("157±32", 
"152±37", "151±24", "143±25", "144±29", "126±30"), month1_gp2 = c("181±14", 
"133±34", "152±38", "144±30", "148±20", "137±19"), month3_gp1 = c("139±38", 
"161±39", "166±38", "162±39", "151±38", "155±38"), month3_gp2 = c("151±40", 
"161±33", "137±25", "161±31", "168±30", "147±34")), .Names = c("test", 
"month0_gp1", "month0_gp2", "month1_gp1", "month1_gp2", "month3_gp1", 
"month3_gp2"), row.names = c(NA, 6L), class = "data.frame")

   test month0_gp1 month0_gp2 month1_gp1 month1_gp2 month3_gp1 month3_gp2
1 test1     163±28     122±17     157±32     181±14     139±38     151±40
2 test2     133±20     167±20     152±37     133±34     161±39     161±33
3 test3     177±29     146±26     151±24     152±38     166±38     137±25
4 test4     153±30     150±27     143±25     144±30     162±39     161±31
5 test5     161±31     148±33     144±29     148±20     151±38     168±30
6 test6     159±23     161±37     126±30     137±19     155±38     147±34

我必须将列2:7分成2列(一个用于平均值,另一个用于sd):

test month0_gp1_mean month0_gp1_sd month0_gp2_mean month0_gp2_sd month1_gp1_mean month1_gp1_sd  ....

我检查了以前的帖子并使用了do.call(rbind...方法:

mydf <- data.frame(do.call(rbind, strsplit(olddf$month0_gp1,'±')))

mydf
   X1 X2
1 163 28
2 133 20
3 177 29
4 153 30
5 161 31
6 159 23

但这一次只适用于一列。如何修改此值以循环到2:7列,并将它们组合起来以形成一个新的数据框?谢谢你的帮助。

A5C1D2H2I1M1N2O1R2T1

首先,从GitHub Gist获得我的cSplit功能

其次,将其拆分:

cSplit(olddf, 2:ncol(olddf), sep = "±")
#     test 2_1 2_2 3_1 3_2 4_1 4_2 5_1 5_2 6_1 6_2 7_1 7_2
# 1: test1 163  28 122  17 157  32 181  14 139  38 151  40
# 2: test2 133  20 167  20 152  37 133  34 161  39 161  33
# 3: test3 177  29 146  26 151  24 152  38 166  38 137  25
# 4: test4 153  30 150  27 143  25 144  30 162  39 161  31
# 5: test5 161  31 148  33 144  29 148  20 151  38 168  30
# 6: test6 159  23 161  37 126  30 137  19 155  38 147  34

如果要在同一步骤中重命名列,请尝试:

Nam <- names(olddf)[2:ncol(olddf)]
setnames(
  cSplit(olddf, 2:ncol(olddf), sep = "±"), 
  c("test", paste(rep(Nam, each = 2), c("mean", "sd"), sep = "_")))[]

另一种选择是查看dplyr+ tidyr

这是我能想到的最好的方法,但是我不确定这是否是使用这些工具的正确方法。

olddf %>%
  gather(GM, value, -test) %>%          # Makes the data somewhat long
  separate(value, c("MEAN", "SD")) %>%  # Splits "value" column. We're wide again
  gather(MSD, value, -test, -GM) %>%    # Makes the data long again
  unite(var, GM, MSD) %>%               # Combines GM and MSD columns
  spread(var, value)                    # Goes from wide to long

这相当于melt一次对数据进行一次处理,colsplit对结果的“值”列melt使用一次,再次对数据进行处理,然后dcast用于获取宽格式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 R 中的多列中拆分数据框

来自分类Dev

根据多列进行拆分,然后在R中应用spread()

来自分类Dev

将列拆分为多列R

来自分类Dev

在R中自适应地将列拆分为多列

来自分类Dev

将包含不等长字符串的列拆分为 R 中的多列

来自分类Dev

在R的矩阵中的多列中拆分多个字符串

来自分类Dev

r:按值将列拆分为多列

来自分类Dev

如何在R中将字符列拆分为多列

来自分类Dev

如何拆分多列?

来自分类Dev

拆分多列

来自分类Dev

regex-将一列拆分为多列,R中没有显式定界符

来自分类Dev

在R中的列中拆分单词

来自分类Dev

在R中的不同列中拆分值

来自分类Dev

在R中的列中拆分单词

来自分类Dev

将Pandas Dataframe中的列表拆分为多列

来自分类Dev

SQL-在多列中拆分字符串

来自分类Dev

在R中绘制多列

来自分类Dev

检查 R 中的多列

来自分类Dev

在R Dataframe列中拆分单词

来自分类Dev

将行拆分为R中的列

来自分类Dev

在R中按列内容拆分行

来自分类Dev

根据R中的列号拆分矩阵

来自分类Dev

R中是否可以将一列中的字符串拆分为多列并为每个子字符串添加行?

来自分类Dev

如何将仅包含数字的数据框中的列拆分为熊猫中的多列

来自分类Dev

将双行字符列拆分为R中的两列

来自分类Dev

如何在R中使用模式将一列拆分为多列

来自分类Dev

将一列拆分为多列,还可以防止前导零落入拆分列中

来自分类Dev

将列拆分为多列

来自分类Dev

将列拆分为多列