gpt4 book ai didi

r - 当所需变量的数量未知时如何使用 tidyr::separate

转载 作者:行者123 更新时间:2023-12-03 14:48:54 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Splitting a dataframe string column into multiple different columns [duplicate]

(4 个回答)


4年前关闭。




我有一个包含电子邮件通信的数据集。一个例子:

library(dplyr)
library(tidyr)

dat <- data_frame('date' = Sys.time(),
'from' = c("person1@gmail.com", "person2@yahoo.com",
"person3@hotmail.com", "person4@msn.com"),
'to' = c("person2@yahoo.com,person3@hotmail.com", "person3@hotmail.com",
"person4@msn.com,person1@gmail.com,person2@yahoo.com", "person1@gmail.com"))

在上面的例子中,很简单,可以看到我需要多少个变量,所以我可以执行以下操作:
dat %>% separate(to, into = paste0("to_", 1:3), sep = ",", extra = "merge", fill = "right")

#Source: local data frame [4 x 5]
#
# date from to_1 to_2 to_3
# (time) (chr) (chr) (chr) (chr)
#1 2015-10-22 14:52:41 person1@gmail.com person2@yahoo.com person3@hotmail.com NA
#2 2015-10-22 14:52:41 person2@yahoo.com person3@hotmail.com NA NA
#3 2015-10-22 14:52:41 person3@hotmail.com person4@msn.com person1@gmail.com person2@yahoo.com
#4 2015-10-22 14:52:41 person4@msn.com person1@gmail.com NA NA

但是,我的数据集有 4,000 条记录,我宁愿不去查找包含最多元素的行,这样我就可以确定需要创建多少个变量。我处理这个问题的方法是首先自己拆分列并获取每个拆分的长度,然后找到最大值:
n_vars <- dat$to %>% str_split(",") %>% lapply(function(z) length(z)) %>% unlist() %>% max()

但这似乎效率低下。有没有更好的方法来做到这一点?

最佳答案

我们可以使用 cSplit

library(splitstackshape) 
cSplit(dat, 'to', ',')

关于r - 当所需变量的数量未知时如何使用 tidyr::separate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33288695/

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