我有一个只有一个字符串列的数据表。我想使用strsplit创建另一列,该列是此列的子集。
dat <- data.table(labels=c('a_1','b_2','c_3','d_4'))
我想要的输出是
label sub_label
a_1 a
b_2 b
c_3 c
d_4 d
我已经尝试了下面的方法,但似乎都没有起作用。
dat %>%
mutate(
sub_labels=strsplit(as.character(labels), "_")[[1]][1]
)
# gives a column whose values are all "a"
这个对我来说似乎是合理的。
dat %>%
mutate(
sub_labels=sapply(strsplit(as.character(labels), "_"), function(x) x[[1]][1])
)
出现错误
错误:不知道如何处理类型pairlist
我看到另一篇帖子,在该帖子中,从strsplit的输出中复制并粘贴合并可以正常工作,因此我不明白为什么在匿名函数中进行子集设置会出现问题。感谢任何有关此事的阐述。
substr
更简单,因为它们返回字符串而不是列表:dat %>% mutate(sub_label = sub('_.*', '', labels))
另一个选择是使用tidyr::separate
和extra='drop'
以及remove=FALSE
:dat %>% separate(labels, 'sub_label', extra='drop', remove=FALSE)
。 - alistairedata.table
,只需执行dat[, c("first","second") := tstrsplit(labels,"_")]
。 - thelatemail