data.table在每列上应用函数

阿丽娜·路德维希(Alina Ludewig)

我想我已经很接近解决方案了,但是我很难将lapply与data.table结合起来。我阅读了很多有关lapply的内容,并找到了有关data.table的示例,但是这种思维方式对我来说是新的,它使我发疯……

这是我的数据表

cells <- c(150, 1,1980,1,1,1,0,0,0,1,2004,3,
       99 , 1,1980,1,1,1,1,0,0,0,2004,4,
       899, 1,1980,0,1,0,1,1,1,1,2007,4,
       789, 1,1982,1,1,1,0,1,1,1,2004,3 )
colname <- c("number","sex", "birthy", "2004","2005", "2006", "2007", "2008", "2009","2010","begy","SeqLen")
rowname <- c("2","3","4","5")
y <- matrix(cells, nrow=4, ncol=12, byrow=TRUE, dimnames = list(rowname,colname))
y <- data.table(y, keep.rownames = TRUE)

我想逐步了解列名

cols <- c(paste(2004:2010, sep=" "))

仅对一根色谱柱执行以下操作即可!

vec <- "2005"
y[,  (vec) := ifelse((vec) < as.numeric(begy),0, ifelse( ((vec) > as.numeric(begy) + as.numeric(SeqLen) -1) ,0,1)) ]

创建函数并逐步遍历向量接缝是一个很好的解决方案,但是如何呢?我找到了这个...

dt[ , (cols) := lapply(.SD, "*", -1), .SDcols = cols]

但是在这个例子中我可以把ifelse放在哪里?

我还阅读了有关for循环和set函数的信息,例如...

for (j in cols) set(dt, j = j, value = ifelse((dt[[j]]) < as.numeric(dt[[begy]]),0, ifelse( (dt[[j]] > as.numeric(dt[[begy]]) + as.numeric(dt[[SeqLen]]) -1) ,0,1)))

但这是胡说八道。

谢谢阿丽娜

chinsoon12

好像你用1设置年列,如果它是之间begybegy + SeqLen - 1每一行。这是执行此操作的另一种方法:

y[order(rn), 
    (grep("^20", names(y), value=TRUE)) := 
        dcast(y[, seq(begy, by=1, length.out=SeqLen), by=.(rn)], rn ~ V1, length)[,-1L]]
y

输出:

   rn number sex birthy 2004 2005 2006 2007 2008 2009 2010 begy SeqLen
1:  2    150   1   1980    1    1    1    0    0    0    0 2004      3
2:  3     99   1   1980    1    1    1    1    0    0    0 2004      4
3:  4    899   1   1980    0    0    0    1    1    1    1 2007      4
4:  5    789   1   1982    1    1    1    0    0    0    0 2004      3

说明:

为每一行创建一个年份序列,然后用于dcast进行一次热编码。使用输出覆盖年份列。

order(rn) 将确保我们不会在之后错误地覆盖行 dcast


弗兰克的方法更快:

y[, as.character(2004:2010) := 
    lapply(2004:2010, function(x) as.integer(between(x, begy, begy + SeqLen - 1)))] 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在 data.table 中的两列上滚动应用 EMA 函数

如何在data.table的每一行中应用函数

dplyr:将函数table()应用于data.frame的每一列

r-将函数应用于data.table的每一行

如何将可变的gsub模式(可变函数)应用于R中的data.table的每一行

在data.table [R]中对具有条件的每列应用一个函数

如何将不同的多参数函数应用于data.table的每一行?

幂查询在每列上应用函数

在data.table的列上,以单个“ data.table”方式记录函数的“ by = ...”分层和非分层输出

在任意数量的 data.frame 列上应用“或”函数并保留缺失

熊猫-在每列上应用返回多个值的函数

应用在vector / data.frame列上返回data.frame / tibble并绑定结果的函数

将函数应用于data.frame的每一列并组织输出

在data.table的两列上滚动功能

.SD列上的data.table子集条件?

data.table在R中逐行应用函数

在按列分组的data.table中应用函数

如何在data.table的嵌套向量中应用函数?

将函数逐行应用于data.table

在熊猫列上应用函数

如何在数据的每一列上应用函数?

在pandas数据框中的每一列上应用函数

如何在熊猫数据框中的每列中包含NaN计数的列上应用函数?

在填充有列表的DataFrame的每一列上应用一个函数

将 .GRP 应用于 data.table R 中的多列以分别对每列进行分组

在不使用apply函数的情况下对data.table的每一行进行操作的方法

R data.table-将函数A应用于某些列,将函数B应用于其他列

在 data.table 中的两列上使用 revgeocode

使用data.table在多列上执行操作