R中的行和列和

R中的行和列和,r,rowsum,R,Rowsum,这是我的数据集(MergedData)在R中的外观示例,我的每个参与者(5行)在每个测试(7列)中都获得了分数。我想知道所有测试的总分(所有列),但每个参与者(行) 另外,我的完整数据集不仅仅包含这几个变量,所以如果可能的话,我希望使用公式和循环,而不必逐行/逐列键入 Participant TestScores ParticipantA 2 4 2 3 2 3 4 ParticipantB 1 3 2 2 3 3 3 Par

这是我的数据集(
MergedData
)在R中的外观示例,我的每个参与者(5行)在每个测试(7列)中都获得了分数。我想知道所有测试的总分(所有列),但每个参与者(行)

另外,我的完整数据集不仅仅包含这几个变量,所以如果可能的话,我希望使用公式和循环,而不必逐行/逐列键入

Participant TestScores     
ParticipantA    2   4   2   3   2   3   4
ParticipantB    1   3   2   2   3   3   3
ParticipantC    1   4   4   2   3   4   2
ParticipantD    2   4   2   3   2   4   4
ParticipantE    1   3   2   2   2   2   2
我尝试过这个,但不起作用:

Test_Scores <- rowSums(MergedData[Test1, Test2, Test3], na.rm=TRUE)
我如何解决这个问题?谢谢

我想你想要这个:

rowSums(MergedData[,c('Test1', 'Test2', 'Test3')], na.rm=TRUE)

请查阅有关
?行和
?列和
的文档

从你的帖子中不清楚什么是
MergedData
。假设它是一个
data.frame
,问题是您的索引
MergedData[Test1、Test2、Test3]
。如果它是一个
data.frame
,则您希望运行如下操作:

Test_Scores <- rowSums(MergedData, na.rm = TRUE)
测试分数您可以使用:

MergedData$Test_Scores_Sum <- rowSums(MergedData[,2:8], na.rm=TRUE)

MergedData$Test\u Scores\u Sum对于小数据,将
data.frame
转换为
,然后使用
addmargins()

使用此示例数据

MergedData<-data.frame(Participant=letters[1:5],
    Test1 = c(2,1,1,2,1),
    Test2 = c(4,3,4,4,3),
    Test3 = c(2,2,4,2,2),
    Test4 = c(3,2,2,3,2),
    Test5 = c(2,3,3,2,2)
)
得到

    Test1 Test2 Test3 Test4 Test5 Sum
a       2     4     2     3     2  13
b       1     3     2     2     3  11
c       1     4     4     2     3  14
d       2     4     2     3     2  13
e       1     3     2     2     2  10
Sum     7    18    12    12    12  61

在这种情况下可能不是非常有用,但是使用
addmargins
还是很有趣的。

前面有四个答案,只有一个显示结果?怎么回事?这里有一个

> dat <- read.table(header=T, text = 
  'Participant Test1 Test2 Test3 Test4 Test5 Test6 Test7     
  ParticipantA    2   4   2   3   2   3   4
  ParticipantB    1   3   2   2   3   3   3
  ParticipantC    1   4   4   2   3   4   2
  ParticipantD    2   4   2   3   2   4   4
  ParticipantE    1   3   2   2   2   2   2')

这里有一种使用
dplyr
reforme2
的方法:

dat <- read.table(header=T, text = 
                    'Participant Test1 Test2 Test3 Test4 Test5 Test6 Test7     
  ParticipantA    2   4   2   3   2   3   4
  ParticipantB    1   3   2   2   3   3   3
  ParticipantC    1   4   4   2   3   4   2
  ParticipantD    2   4   2   3   2   4   4
  ParticipantE    1   3   2   2   2   2   2')

library(dplyr) 
library(reshape2)    

# Melt data into long format
dat.l = melt(dat, id.var="Participant", variable.name="Test")    
> dat.l
    Participant  Test value
1  ParticipantA Test1     2
2  ParticipantB Test1     1
3  ParticipantC Test1     1
4  ParticipantD Test1     2
...
32 ParticipantB Test7     3
33 ParticipantC Test7     2
34 ParticipantD Test7     4
35 ParticipantE Test7     2

# Sum by Participant
dat.l %.%
  group_by(Participant) %.%
  summarise(Sum=sum(value))

   Participant Sum
1 ParticipantA  20
2 ParticipantB  17
3 ParticipantC  20
4 ParticipantD  21
5 ParticipantE  14

# Sum by Test
dat.l %.%
  group_by(Test) %.%
  summarise(Sum=sum(value))

   Test Sum
1 Test1   7
2 Test2  18
3 Test3  12
4 Test4  12
5 Test5  12
6 Test6  16
7 Test7  15
dat dat.l
参与者测试值
1参与者测试1 2
2参与者B测试1 1
3参与者C测试1 1
4参与者测试1 2
...
32参与者B测试7 3
33参与者C测试7 2
34参与测试7 4
35参与测试7 2
#按参与者列出的金额
日期1%。%
组别(参与者)%.%
总结(总和=总和(价值))
参与者金额
1参与者A 20
2参与者B 17
3参与者C 20
4参与者D 21
5参与者14
#测试求和
日期1%。%
分组依据(测试)%.%
总结(总和=总和(价值))
测试和
1测试17
2测试2 18
3测试3 12
4测试4 12
5测试5 12
6测试6 16
7测试7 15

示例数据与代码不匹配。
Test1
(等)数值变量是用作列索引,还是应该是字符串?
addmargins(as.table(MergedData))
    Test1 Test2 Test3 Test4 Test5 Sum
a       2     4     2     3     2  13
b       1     3     2     2     3  11
c       1     4     4     2     3  14
d       2     4     2     3     2  13
e       1     3     2     2     2  10
Sum     7    18    12    12    12  61
> dat <- read.table(header=T, text = 
  'Participant Test1 Test2 Test3 Test4 Test5 Test6 Test7     
  ParticipantA    2   4   2   3   2   3   4
  ParticipantB    1   3   2   2   3   3   3
  ParticipantC    1   4   4   2   3   4   2
  ParticipantD    2   4   2   3   2   4   4
  ParticipantE    1   3   2   2   2   2   2')
> rowSums(dat[-1], na.rm = TRUE)
## [1] 20 17 20 21 14
> colSums(dat[-1], na.rm = TRUE)
##  Test1  Test2  Test3  Test4  Test5  Test6  Test7 
##      7     18     12     12     12     16     15 
dat <- read.table(header=T, text = 
                    'Participant Test1 Test2 Test3 Test4 Test5 Test6 Test7     
  ParticipantA    2   4   2   3   2   3   4
  ParticipantB    1   3   2   2   3   3   3
  ParticipantC    1   4   4   2   3   4   2
  ParticipantD    2   4   2   3   2   4   4
  ParticipantE    1   3   2   2   2   2   2')

library(dplyr) 
library(reshape2)    

# Melt data into long format
dat.l = melt(dat, id.var="Participant", variable.name="Test")    
> dat.l
    Participant  Test value
1  ParticipantA Test1     2
2  ParticipantB Test1     1
3  ParticipantC Test1     1
4  ParticipantD Test1     2
...
32 ParticipantB Test7     3
33 ParticipantC Test7     2
34 ParticipantD Test7     4
35 ParticipantE Test7     2

# Sum by Participant
dat.l %.%
  group_by(Participant) %.%
  summarise(Sum=sum(value))

   Participant Sum
1 ParticipantA  20
2 ParticipantB  17
3 ParticipantC  20
4 ParticipantD  21
5 ParticipantE  14

# Sum by Test
dat.l %.%
  group_by(Test) %.%
  summarise(Sum=sum(value))

   Test Sum
1 Test1   7
2 Test2  18
3 Test3  12
4 Test4  12
5 Test5  12
6 Test6  16
7 Test7  15