Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将运算符应用于同一数据帧的不同元素,而不通过[row,column]调用元素?_R - Fatal编程技术网

如何将运算符应用于同一数据帧的不同元素,而不通过[row,column]调用元素?

如何将运算符应用于同一数据帧的不同元素,而不通过[row,column]调用元素?,r,R,第一次问问题。我试图寻找一个答案,但没有找到确切的答案 目前我有一个小(2x2)数据帧: status weighted.responses 1 control 3.872694 2 exposed 3.713198 我想做的是通过调用一个特定的名称从“Control”中减去“Exposed”,而不是[2,2]-[1,2]。原因是,随着时间的推移,将有更多的列添加到此数据帧 我曾尝试转置数据帧,将行升级为标题,然后删除用于标题的行,但最后得到了一个

第一次问问题。我试图寻找一个答案,但没有找到确切的答案

目前我有一个小(2x2)数据帧:

   status weighted.responses
1 control           3.872694
2 exposed           3.713198
我想做的是通过调用一个特定的名称从“Control”中减去“Exposed”,而不是[2,2]-[1,2]。原因是,随着时间的推移,将有更多的列添加到此数据帧

我曾尝试转置数据帧,将行升级为标题,然后删除用于标题的行,但最后得到了一个向量

  • 由于某种原因,转置似乎也会将数据帧转换为字符串,这是另一个问题
我试着只取“weighted.responses”的向量,相应地命名它们,然后进行减法,但随后我遇到了一个问题,即新变量最终是一个命名的数字,这是我不想要的。在这一点上,我确信,对于一个问题,使用几行不同的语句似乎是在浪费时间和空间

我觉得我在绕着一个非常简单的解决方案转,但我想不出来


我非常感谢您的时间,并对格式设置表示歉意。

使用
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))