我的数据看起来像这样
X Y Z A B C
Qualify 10 35 us01 us03,ud05 um90,ug09
Identify 20 23 us02 us06, us01 us91,us93,us95
但必须将数据更改为显示如下。这样单元格内的数据就成了行。但是一些单元格具有奇异值,而一些单元格具有逗号分隔的多个单元格。因此,动态地,他们需要更改并放入新行,并重复其他列中的相同数据。
Identifier Role X Y Z
us01 A Qualify 10 35
us03 B Qualify 10 35
us05 B Qualify 10 35
um90 C Qualify 10 35
ug09 C Qualify 10 35
我试过了cSplit
,但它没有用,实际上变得更糟。
答案 0 :(得分:0)
这是否可以使用tidyr/dplyr
,其中df是您的数据框:
df %>% separate(B, into=c("B1","B2")) %>%
separate(C, into=c("C1","C2","C3")) %>%
gather(Role,Id,A:C3)
给出了这个;
X Y Z Role Id
<chr> <int> <int> <chr> <chr>
1 Qualify 10 35 A us01
2 Identify 20 23 A us02
3 Qualify 10 35 B1 us03
4 Identify 20 23 B1 us06
5 Qualify 10 35 B2 ud05
6 Identify 20 23 B2 us01
7 Qualify 10 35 C1 um90
8 Identify 20 23 C1 us91
9 Qualify 10 35 C2 ug09
10 Identify 20 23 C2 us93
11 Qualify 10 35 C3 <NA>
12 Identify 20 23 C3 us95
答案 1 :(得分:0)
获得所需输出的一种非常天真的方式。当然不是最好的解决方案,但我想它会得到你想要的。
将数据集称为data
。
data <- tidyr::gather(data, "Role", "Identifier", 4:6)
data2 <- strsplit(data$Identifier, split = ",")
data2 <- data.frame(X = rep(data$X, sapply(data2, length)),
Y = rep(data$Y, sapply(data2, length)),
Z = rep(data$Z, sapply(data2, length)),
Role = rep(data$Role, sapply(data2, length)),
Identifier = unlist(data2))