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