首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >data.table中各列之间的差异

data.table中各列之间的差异
EN

Stack Overflow用户
提问于 2017-09-27 12:56:51
回答 2查看 434关注 0票数 0

很抱歉,这可能是一个非常基本的观点,但我找不到一个方便的工具。

我有一个(相当大的)数据表,并且希望不同列之间的差异,即

代码语言:javascript
运行
复制
A     B     C     D

9     N.A.  3     2
15    4     N.A.  N.A.
N.A.  N.A   2     3

我想要创建一个新的E列,它是在B,C和D列中减去B,C和D后剩下的A,对于B,C和D列,我可以假定为零,但是当A中有一个N.A时,我不得不忽略这个观察。所以最终的结果应该是

代码语言:javascript
运行
复制
A     B     C     D     E

9     N.A.  3     2     4
15    4     N.A.  N.A.  11

我正在删除DT中的所有列,这些列是A中的N.A. by DT <- DT!(DT$A=="N.A.")

然后我尝试了DT,E:= lapply(.SD,diff),.SDcols = c("A","B","C","D")。但这失败了,因为na.s。我不想手动将na.s转换为0(因为后来我可能想要区分什么是真正的零,什么是我推测的)--我想在函数中做这个。有人有一个好主意吗?

EN

Stack Overflow用户

发布于 2017-09-27 13:05:50

给你:

代码语言:javascript
运行
复制
df$E[!is.na(df$A)] = 2*df$A[!is.na(df$A)] - rowSums(df[!is.na(df$A),], na.rm = T)

示例:

代码语言:javascript
运行
复制
df = data.frame(A = c(19,25,NA,17),B = c(1,2,3,4), C = c(5,NA,NA,9), D = c(3,1,2,NA))

>df
   A B  C  D
1 19 1  5  3
2 25 2 NA  1
3 NA 3 NA  2
4 17 4  9 NA

df$E[!is.na(df$A)] = 2*df$A[!is.na(df$A)] - rowSums(df[!is.na(df$A),], na.rm = T)

> df
   A B  C  D  E
1 19 1  5  3 10
2 25 2 NA  1 22
3 NA 3 NA  2 NA
4 17 4  9 NA  4
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46448504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档