在列中的每个单元格上应用函数,并将结果添加到新列

Ani*_*mar 7 r data.table

我有一个data.table,如下所示.我想要的是将一个函数应用于C列中的每个元素.该函数将接受一个向量(因为Col C包含向量元素)并返回另一个向量.应将此结果向量添加到新列中.

     A   B         C        
1:  16  151 c(2579, 2659, 2752)
2:  16  152 c(2580, 2660, 2753) 
3:  16  153 c(2581, 2661, 2754)
4:  16  154 c(2582, 2662, 2755)
5:  16  155 c(2583, 2663, 2756)
6:  16  156 c(2584, 2664, 2757)
Run Code Online (Sandbox Code Playgroud)

例如,让我们考虑一个函数'isOdd',它接受一个向量并返回一个逻辑向量.应用此函数后的输出表应如下所示

     A   B           C            isOdd
1:  16  151 c(2579, 2659, 2752)  c(T,T,F)
2:  16  152 c(2580, 2660, 2753)  c(F,F,T) 
3:  16  153 c(2581, 2661, 2754)  c(T,T,F)
4:  16  154 c(2582, 2662, 2755)  c(F,F,T)
5:  16  155 c(2583, 2663, 2756)  c(T,T,F)
6:  16  156 c(2584, 2664, 2757)  c(F,F,T)
Run Code Online (Sandbox Code Playgroud)

我该如何实现这一目标?

小智 4

使用R的apply函数,我们可以轻松实现您的目标。假设 d 是您正在使用的 data.table。基本上,lapply 将“C”列的每一行传递给匿名函数,然后匿名函数进一步将传入行的每个元素传递给函数 isOdd。

isOdd <- function(x) {
    if (x %% 2 == 0) return("F") 
    else return("T")
}

d$isOdd <- lapply(d$C, function(x) sapply(x, isOdd))
Run Code Online (Sandbox Code Playgroud)