gpt4 book ai didi

r - 在多列上应用 tidyr::separate

转载 作者:行者123 更新时间:2023-12-03 19:53:01 24 4
gpt4 key购买 nike

我想遍历数据框中的列并根据分隔符将它们拆分为 。我正在使用 tidyr::separate ,当我一次做一列时有效。

例如:

df<- data.frame(a = c("5312,2020,1212"), b = c("345,982,284"))

df <- separate(data = df, col = "a",
into = paste("a", c("col1", "col2", "col3"),
sep = "_"), sep = ",")

返回:
  a_col1 a_col2 a_col3           b
1 5312 2020 1212 345,982,284

当我尝试对 df 的每一列执行相同的操作时R 返回错误

例如我用这个 for 循环:
for(col in names(df)){
df <- separate(data = df, col = col,
into = paste(col, c("col1", "col2", "col3),
sep = "_"), sep = ",")
}

我期待得到以下输出:
  a_col1 a_col2 a_col3 b_col1 b_col2 b_col3
1 5312 2020 1212 345 982 284

但是 R 返回此错误:
Error in if (!after) c(values, x) else if (after >= lengx) c(x, values) else c(x[1L:after],  : 
argument is of length zero

还有其他申请方式 tidyr::separate数据框中的多列?

最佳答案

您可以提供定制的 separate_()调用 Reduce() .

sep <- function(...) {
dots <- list(...)
n <- stringr::str_count(dots[[1]][[dots[[2]]]], "\\d+")
separate_(..., into = sprintf("%s_col%d", dots[[2]], 1:n))
}

df %>% Reduce(f = sep, x = c("a", "b"))
# a_col_1 a_col_2 a_col_3 b_col_1 b_col_2 b_col_3
# 1 5312 2020 1212 345 982 284

否则, cSplit也会这样做。
splitstackshape::cSplit(df, names(df))
# a_1 a_2 a_3 b_1 b_2 b_3
# 1: 5312 2020 1212 345 982 284

关于r - 在多列上应用 tidyr::separate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42464250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com