gpt4 book ai didi

R 将逗号分隔的单元格分成行和笛卡尔积

转载 作者:行者123 更新时间:2023-12-02 03:42:45 24 4
gpt4 key购买 nike

下面有 mydf 数据框。我想拆分包含逗号分隔数据的任何单元格并将其放入行中。我正在寻找类似于下面的 y 的数据框。我怎样才能通过几个步骤有效地完成它?目前我一次在一列上使用 cSplit 函数。

我尝试了cSplit(mydf, c("name","new"), ",", Direction = "long"),但是没用

library(splitstackshape)
mydf=data.frame(name = c("AB,BW","x,y,z"), AB = c('A','B'), new=c("1,2,3","4,5,6,7"))
mydf

x=cSplit(mydf, c("name"), ",", direction = "long")
x
y=cSplit(x, c("new"), ",", direction = "long")
y

最佳答案

有时 for 循环在 R 中使用完全没问题。这就是其中之一。尝试:

library(splitstackshape)
cols <- c("name", "new")
for (i in cols) {
mydf <- cSplit(mydf, i, ",", "long")
}

mydf
## name AB new
## 1: AB A 1
## 2: AB A 2
## 3: AB A 3
## 4: BW A 1
## 5: BW A 2
## 6: BW A 3
## 7: x B 4
## 8: x B 5
## 9: x B 6
## 10: x B 7
## 11: y B 4
## 12: y B 5
## 13: y B 6
## 14: y B 7
## 15: z B 4
## 16: z B 5
## 17: z B 6
## 18: z B 7

这是使用稍大的数据进行的小测试:

# concat.test = sample data from "splitstackshape"
test <- do.call(rbind, replicate(5000, concat.test, FALSE))

fun1 <- function() {
cols <- c("Likes", "Siblings")
for (i in cols) {
test <- cSplit(test, i, ",", "long")
}
test
}

fun2 <- function() {
test %>%
separate_rows("Likes") %>%
separate_rows("Siblings")
}

system.time(fun1())
# user system elapsed
# 3.205 0.056 3.261
system.time(fun2())
# user system elapsed
# 11.598 0.066 11.662

关于R 将逗号分隔的单元格分成行和笛卡尔积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47970199/

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