Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用plyr::mutate以矢量化方式提取列表部分?_R_List_Plyr - Fatal编程技术网

使用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