使用plyr::mutate以矢量化方式提取列表部分?
假设此代码:使用plyr::mutate以矢量化方式提取列表部分?,r,list,plyr,R,List,Plyr,假设此代码: foo <- data.frame(cols_val=c("NA", "1:2:3", "4:5:6")) library(plyr) foo <- mutate( foo, cols_list = str_split(cols_val, ":"), one = cols_list[1], two = cols_list[2]) 我们可以使用cSplit library(splitstackshape) cSplit(foo, 'cols_val',
foo <- data.frame(cols_val=c("NA", "1:2:3", "4:5:6"))
library(plyr)
foo <- mutate(
foo,
cols_list = str_split(cols_val, ":"),
one = cols_list[1],
two = cols_list[2])
我们可以使用
cSplit
library(splitstackshape)
cSplit(foo, 'cols_val', ":")
# cols_val_1 cols_val_2 cols_val_3
#1: NA NA NA
#2: 1 2 3
#3: 4 5 6
默认情况下,原始列将作为drop=TRUE
删除。如果还需要保留原始列,请使用drop=FALSE
。默认情况下,它还会转换“类”
cSplit(foo, 'cols_val', ":", drop=FALSE)
# cols_val cols_val_1 cols_val_2 cols_val_3
#1: NA NA NA NA
#2: 1:2:3 1 2 3
#3: 4:5:6 4 5 6
您可以使用tidyr::separate()
代替plyr。它正是你想做的。我们可以保留现有列(使用remove=FALSE
)以及将所有新列转换为适当的类型(使用convert=TRUE
)。我只使用fill=“left”
来避免未使用时出现警告。我不太清楚为什么会出现这种警告
tidyr::separate(foo, cols_val, c("one", "two", "three"), ":",
remove = FALSE, convert = TRUE, fill = "left")
# cols_val one two three
# 1 NA NA NA NA
# 2 1:2:3 1 2 3
# 3 4:5:6 4 5 6
尝试
库(splitstackshape);cSplit(foo,‘cols_val’,“:”)
谢谢!我认为出现警告是因为不能使用:Yeah将第一行拆分为三列。帮助文件说这与sep
有关,但我尝试了sep=rep(“:”,2)
,但也没有摆脱它。哦,好吧。
tidyr::separate(foo, cols_val, c("one", "two", "three"), ":",
remove = FALSE, convert = TRUE, fill = "left")
# cols_val one two three
# 1 NA NA NA NA
# 2 1:2:3 1 2 3
# 3 4:5:6 4 5 6