【发布时间】:2019-07-23 15:03:15
【问题描述】:
我有一个数据框 A 如下所示,其中 Info 列缺少一些信息,例如 Sample2 没有任何您可以看到的白色或黑色:
可重现的例子:
A <- structure(list(Sample = structure(1:7, .Label = c("Sample1",
"Sample2", "Sample3", "Sample4", "Sample5", "Sample6", "Sample7"
), class = "factor"), Description = structure(c(7L, 3L, 4L, 2L,
6L, 1L, 5L), .Label = c("37 years, female, white, alive, 257 days",
"43 years, male, white, stage:iiic, alive, 598 days", "53 years, male, stage:iiib, alive, 792 days",
"68 years, female, white, stage:iiic, dead, 740 days", "69 years, female, black or african american, stage:iia, alive, 627 days",
"74 years, white, stage:i, alive, 1001 days", "82 years, female, white, stage:iiib, alive, 1419 days"
), class = "factor")), class = "data.frame", row.names = c(NA,
-7L))
数据框A 如下所示:
Sample Info
Sample1 82 years, female, white, stage:iiib, alive, 1419 days
Sample2 53 years, male, stage:iiib, alive, 792 days
Sample3 68 years, female, white, stage:iiic, dead, 740 days
Sample4 43 years, male, white, stage:iiic, alive, 598 days
Sample5 74 years, white, stage:i, alive, 1001 days
Sample6 37 years, female, white, alive, 257 days
Sample7 69 years, female, black, stage:iia, alive, 627 days
为了将Info 列分成多个列,我使用了separate 函数,如下所示
library(dplyr)
library(tidyr)
A2 <- separate(A, 'Info', paste("Info", 1:6, sep="_"), sep=",", extra="drop")
但新列看起来不均匀,如下所示:
Sample Info_1 Info_2 Info_3 Info_4 Info_5 Info_6
Sample1 82 years female white stage:iiib alive 1419 days
Sample2 53 years male stage:iiib alive 792 days NA
Sample3 68 years female white stage:iiic dead 740 days
Sample4 43 years male white stage:iiic alive 598 days
Sample5 74 years white stage:i alive 1001 days NA
Sample6 37 years female white alive 257 days NA
Sample7 69 years female black stage:iia alive 627 days
我希望output 看起来像下面这样,其中缺少的信息需要是空格或 NA,最后一列仅显示数字,其中没有任何单词 days:
Sample Info_1 Info_2 Info_3 Info_4 Info_5 Info_6
Sample1 82 years female white stage:iiib alive 1419
Sample2 53 years male stage:iiib alive 792
Sample3 68 years female white stage:iiic dead 740
Sample4 43 years male white stage:iiic alive 598
Sample5 74 years white stage:i alive 1001
Sample6 37 years female white alive 257
Sample7 69 years female black stage:iia alive 627
感谢任何帮助。比q
【问题讨论】:
-
似乎需要一些逻辑来将值与您尚未编程的正确列进行匹配,即 Info_3 包含信息“white”或“black”,Info_4 包含字符串“stage:”后跟几个字母等。
separate无法为您解决这个问题,它只会用一些分隔符分割字符串 -
最简单的解决方案是转到源并以不同的方式导出数据,以便包含空单元格,无论是没有信息还是“NA”。所以如果你有 A 和 C 但没有 B,你会看到 "(...), A, , C, (...)"。
-
@Sotos 我已经在这里举了一个例子。我还展示了我尝试了什么,以及我需要的输出应该是什么样子。
-
@user3351523 看看我给你的链接。您需要发布可重现的示例(我可以轻松复制/粘贴到我的会话中)