tidyr 在多列上使用separate_rows [英] tidyr use separate_rows over multiple columns
问题描述
我有一个 data.frame,其中一些单元格包含逗号分隔值的字符串:
I have a data.frame where some cells contain strings of comma separate values:
d <- data.frame(a=c(1:3),
b=c("name1, name2, name3", "name4", "name5, name6"),
c=c("name7","name8, name9", "name10" ))
我想将每个名称拆分为自己的单元格的字符串分开.
I want to separate those strings where each name is split into its own cell. This is easy with
tidyr::separate_rows(d, b, sep=",")
如果一次完成一列.但是我不能同时对b"和c"列执行此操作,因为它要求每个字符串中的名称数量相同.而不是写
if it is done for one column a time. But I can't do this for both columns "b" and "c" at the same time, since it requires that the number of names in each string is the same. Instead of writing
tidyr::separate_rows(d, b, sep=",")
tidyr::separate_rows(d, c, sep=",")
有没有办法在单行中做到这一点,例如与申请?类似的东西
Is there a way to do this in a one-liner, for e.g. with apply? Something like
apply(d, 2, separate_rows(...))
不确定如何将参数传递给 separate_rows()
函数.
Not sure how to pass the arguments to the separate_rows()
function.
推荐答案
您可以使用管道.注意 sep = ", "
是自动检测的.
You can use a pipe. Note that sep = ", "
is automatically detected.
d %>% separate_rows(b) %>% separate_rows(c)
# a b c
# 1 1 name1 name7
# 2 1 name2 name7
# 3 1 name3 name7
# 4 2 name4 name8
# 5 2 name4 name9
# 6 3 name5 name10
# 7 3 name6 name10
注意:使用 tidyr 0.6.0 版,其中 %>%
运算符包含在包中.
Note: Using tidyr version 0.6.0, where the %>%
operator is included in the package.
更新: 使用@doscendodiscimus 注释,我们可以使用 for()
循环并在每次迭代中重新分配 d
.这样我们就可以拥有任意多的列.我们将使用列名的字符向量,因此我们需要切换到标准评估版本,separate_rows_
.
Update: Using @doscendodiscimus comment, we could use a for()
loop and reassign d
in each iteration. This way we can have as many columns as we like. We will use a character vector of column names, so we'll need to switch to the standard evaluation version, separate_rows_
.
cols <- c("b", "c")
for(col in cols) {
d <- separate_rows_(d, col)
}
给出更新的 d
a b c
1 1 name1 name7
2 1 name2 name7
3 1 name3 name7
4 2 name4 name8
5 2 name4 name9
6 3 name5 name10
7 3 name6 name10
这篇关于tidyr 在多列上使用separate_rows的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!