如何将运算符应用于同一数据帧的不同元素,而不通过[row,column]调用元素?
第一次问问题。我试图寻找一个答案,但没有找到确切的答案 目前我有一个小(2x2)数据帧:如何将运算符应用于同一数据帧的不同元素,而不通过[row,column]调用元素?,r,R,第一次问问题。我试图寻找一个答案,但没有找到确切的答案 目前我有一个小(2x2)数据帧: status weighted.responses 1 control 3.872694 2 exposed 3.713198 我想做的是通过调用一个特定的名称从“Control”中减去“Exposed”,而不是[2,2]-[1,2]。原因是,随着时间的推移,将有更多的列添加到此数据帧 我曾尝试转置数据帧,将行升级为标题,然后删除用于标题的行,但最后得到了一个
status weighted.responses
1 control 3.872694
2 exposed 3.713198
我想做的是通过调用一个特定的名称从“Control”中减去“Exposed”,而不是[2,2]-[1,2]。原因是,随着时间的推移,将有更多的列添加到此数据帧
我曾尝试转置数据帧,将行升级为标题,然后删除用于标题的行,但最后得到了一个向量
- 由于某种原因,转置似乎也会将数据帧转换为字符串,这是另一个问题
我非常感谢您的时间,并对格式设置表示歉意。使用
dplyr
/tidyverse
有几种不同的方法可以做到这一点。请注意,像spread
这样的函数在重塑数据帧方面比t()
更有效,后者将数据帧转换为矩阵,并强制所有值为相同的类型。您可以做的事情的示例:
library(tidyverse)
df = data.frame(
status = c("Control", "Exposed"),
response = c(3.87, 3.71)
)
df %>% spread(status, response) %>% summarize(diff = Control - Exposed)
# Output:
diff
1 0.16
df %>%
summarize(diff = response[status == "Control"] - response[status == "Exposed"])
# Output:
diff
1 0.16
1)减法这将从第2行中减去第1行,即使有超过2列。假设其他列是数值列,也要进行差分。注意这里的-1表示除第一列之外的所有列
DF[2, -1] - DF[1, -1]
2)行名另一种方法是将第一列转换为行名,然后进行减法运算:
DF1 <- DF[-1]
rownames(DF1) <- DF[[1]]
DF1["exposed", ] - DF1["control", ]
也许您可以发布虚拟数据和预期输出?“抱歉,无法嵌入”?为什么?这只是一个简单的复制/粘贴。我想他们的意思是他们不能嵌入图像。OP,为了将来使用,最好将您的数据作为文本包含在问题中,例如,
print(df)
的控制台输出非常感谢您的帮助。最后我选择了第三种选择。我感谢你花时间来帮助我!
data.frame(lapply(DF[-1], diff))