data.table不会按预期修改列
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了data.table不会按预期修改列相关的知识,希望对你有一定的参考价值。
我有一个功能
delete.all.after.pattern <- function (x,pattern) strsplit(x,pattern)[[1]][1]
和data.table
a <- c(1:3)
b <- c("a","b
undesired text","c")
dt <- data.table(a=a, b=b)
因此,我希望dt [, b:=delete.all.after.pattern(b,"\n")]
会导致
a b
1: 1 a
2: 2 b
3: 3 c
代替 :
a b
1: 1 a
2: 2 a
3: 3 a
我错过了什么?
答案
我想你正在寻找:
dt [, b := sapply(b, delete.all.after.pattern, pattern="\n")]
您的函数没有矢量化,因此它只返回第一个元素,该元素对所有行重复。
或者你可以直接在strsplit
打电话给j
:
dt [, b := lapply(strsplit(b, "
"), `[[`, 1L)]
您也可以将代码放入函数中并调用它
fun <- function(x, p) lapply(strsplit(x, p), `[[`, 1L)
dt [, b := fun(b, "
")]
另一种方法是使用data.table::tstrsplit
如下:
dt[, b := tstrsplit(b, "\n", keep=1L)]
以上是关于data.table不会按预期修改列的主要内容,如果未能解决你的问题,请参考以下文章
data.table 包中的 := (按引用传递)运算符同时修改另一个数据表对象
如何在 data.table 中添加一列并返回多列而不修改基础数据?