R中按行列出的比率
我用R来分析一项调查。下面描述了一个示例数据帧。我想在DF中创建两个新列。第一个称为DF$ratio,应该找到每个组的TRUE和FALSE数量的比率。例如,新列的第二行应该是0.676(23/34),第四行应该是0.622(204/328)。第二个称为DF$ratio2,应该是每组的真数与真与假之和的比率。例如,新列的第二行应该是0.404(23/(23+34))。我是R的新手。有没有简单的方法来生成这些新列?谢谢R中按行列出的比率,r,dataframe,row,R,Dataframe,Row,我用R来分析一项调查。下面描述了一个示例数据帧。我想在DF中创建两个新列。第一个称为DF$ratio,应该找到每个组的TRUE和FALSE数量的比率。例如,新列的第二行应该是0.676(23/34),第四行应该是0.622(204/328)。第二个称为DF$ratio2,应该是每组的真数与真与假之和的比率。例如,新列的第二行应该是0.404(23/(23+34))。我是R的新手。有没有简单的方法来生成这些新列?谢谢 accept group
accept group number
1 FALSE Very positive 34
2 TRUE Very positive 23
3 FALSE Somewhat positive 328
4 TRUE Somewhat positive 204
5 FALSE Neither positive nor negative 469
6 TRUE Neither positive nor negative 207
7 FALSE Somewhat negative 225
8 TRUE Somewhat negative 111
9 FALSE Very negative 76
10 TRUE Very negative 34
11 FALSE Not Sure/Don’t Know 306
12 TRUE Not Sure/Don’t Know 63
比率1:
DF$ratio[c(FALSE, TRUE)] <- DF$number[c(FALSE, TRUE)] / DF$number[c(TRUE, FALSE)]
DF$比率[c(假,真)]比率1:
DF$ratio[c(FALSE, TRUE)] <- DF$number[c(FALSE, TRUE)] / DF$number[c(TRUE, FALSE)]
DF$比率[c(假,真)]比率1:
DF$ratio[c(FALSE, TRUE)] <- DF$number[c(FALSE, TRUE)] / DF$number[c(TRUE, FALSE)]
DF$比率[c(假,真)]比率1:
DF$ratio[c(FALSE, TRUE)] <- DF$number[c(FALSE, TRUE)] / DF$number[c(TRUE, FALSE)]
DF$ratio[c(FALSE,TRUE)]你可以试试
library(dplyr)
DF %>%
group_by(group) %>%
mutate(ratio=number[accept]/number[!accept],
ratio2=number[accept]/sum(number))
或
或者,如果我们假设每个组有两行,其顺序为FALSE
,TRUE
,并且您希望在比率中填充NA
,比率2
列,用于接受=FALSE
DF$ratio[DF$accept] <- with(DF, number[accept]/number[!accept])
DF$ratio2[DF$accept] <- with(DF, number[accept]/(number[!accept]+
number[accept]))
DF
# accept group number ratio ratio2
#1 FALSE Very positive 34 NA NA
#2 TRUE Very positive 23 0.6764706 0.4035088
#3 FALSE Somewhat positive 328 NA NA
#4 TRUE Somewhat positive 204 0.6219512 0.3834586
#5 FALSE Neither positive nor negative 469 NA NA
#6 TRUE Neither positive nor negative 207 0.4413646 0.3062130
#7 FALSE Somewhat negative 225 NA NA
#8 TRUE Somewhat negative 111 0.4933333 0.3303571
#9 FALSE Very negative 76 NA NA
#10 TRUE Very negative 34 0.4473684 0.3090909
#11 FALSE Not Sure/Don’t Know 306 NA NA
#12 TRUE Not Sure/Don’t Know 63 0.2058824 0.1707317
DF$ratio[DF$accept]您可以试试
library(dplyr)
DF %>%
group_by(group) %>%
mutate(ratio=number[accept]/number[!accept],
ratio2=number[accept]/sum(number))
或
或者,如果我们假设每个组有两行,其顺序为FALSE
,TRUE
,并且您希望在比率中填充NA
,比率2
列,用于接受=FALSE
DF$ratio[DF$accept] <- with(DF, number[accept]/number[!accept])
DF$ratio2[DF$accept] <- with(DF, number[accept]/(number[!accept]+
number[accept]))
DF
# accept group number ratio ratio2
#1 FALSE Very positive 34 NA NA
#2 TRUE Very positive 23 0.6764706 0.4035088
#3 FALSE Somewhat positive 328 NA NA
#4 TRUE Somewhat positive 204 0.6219512 0.3834586
#5 FALSE Neither positive nor negative 469 NA NA
#6 TRUE Neither positive nor negative 207 0.4413646 0.3062130
#7 FALSE Somewhat negative 225 NA NA
#8 TRUE Somewhat negative 111 0.4933333 0.3303571
#9 FALSE Very negative 76 NA NA
#10 TRUE Very negative 34 0.4473684 0.3090909
#11 FALSE Not Sure/Don’t Know 306 NA NA
#12 TRUE Not Sure/Don’t Know 63 0.2058824 0.1707317
DF$ratio[DF$accept]您可以试试
library(dplyr)
DF %>%
group_by(group) %>%
mutate(ratio=number[accept]/number[!accept],
ratio2=number[accept]/sum(number))
或
或者,如果我们假设每个组有两行,其顺序为FALSE
,TRUE
,并且您希望在比率中填充NA
,比率2
列,用于接受=FALSE
DF$ratio[DF$accept] <- with(DF, number[accept]/number[!accept])
DF$ratio2[DF$accept] <- with(DF, number[accept]/(number[!accept]+
number[accept]))
DF
# accept group number ratio ratio2
#1 FALSE Very positive 34 NA NA
#2 TRUE Very positive 23 0.6764706 0.4035088
#3 FALSE Somewhat positive 328 NA NA
#4 TRUE Somewhat positive 204 0.6219512 0.3834586
#5 FALSE Neither positive nor negative 469 NA NA
#6 TRUE Neither positive nor negative 207 0.4413646 0.3062130
#7 FALSE Somewhat negative 225 NA NA
#8 TRUE Somewhat negative 111 0.4933333 0.3303571
#9 FALSE Very negative 76 NA NA
#10 TRUE Very negative 34 0.4473684 0.3090909
#11 FALSE Not Sure/Don’t Know 306 NA NA
#12 TRUE Not Sure/Don’t Know 63 0.2058824 0.1707317
DF$ratio[DF$accept]您可以试试
library(dplyr)
DF %>%
group_by(group) %>%
mutate(ratio=number[accept]/number[!accept],
ratio2=number[accept]/sum(number))
或
或者,如果我们假设每个组有两行,其顺序为FALSE
,TRUE
,并且您希望在比率中填充NA
,比率2
列,用于接受=FALSE
DF$ratio[DF$accept] <- with(DF, number[accept]/number[!accept])
DF$ratio2[DF$accept] <- with(DF, number[accept]/(number[!accept]+
number[accept]))
DF
# accept group number ratio ratio2
#1 FALSE Very positive 34 NA NA
#2 TRUE Very positive 23 0.6764706 0.4035088
#3 FALSE Somewhat positive 328 NA NA
#4 TRUE Somewhat positive 204 0.6219512 0.3834586
#5 FALSE Neither positive nor negative 469 NA NA
#6 TRUE Neither positive nor negative 207 0.4413646 0.3062130
#7 FALSE Somewhat negative 225 NA NA
#8 TRUE Somewhat negative 111 0.4933333 0.3303571
#9 FALSE Very negative 76 NA NA
#10 TRUE Very negative 34 0.4473684 0.3090909
#11 FALSE Not Sure/Don’t Know 306 NA NA
#12 TRUE Not Sure/Don’t Know 63 0.2058824 0.1707317
DF$ratio[DF$accept]我建议重新调整您的数据:
DF <- read.table(text=' accept group number
1 FALSE "Very positive" 34
2 TRUE "Very positive" 23
3 FALSE "Somewhat positive" 328
4 TRUE "Somewhat positive" 204
5 FALSE "Neither positive nor negative" 469
6 TRUE "Neither positive nor negative" 207
7 FALSE "Somewhat negative" 225
8 TRUE "Somewhat negative" 111
9 FALSE "Very negative" 76
10 TRUE "Very negative" 34
11 FALSE "Not Sure/Don’t Know" 306
12 TRUE "Not Sure/Don’t Know" 63', header=TRUE)
library(reshape2)
DF.wide <- dcast(DF, group ~ accept, value.var="number")
DF.wide$ratio <- DF.wide[["TRUE"]]/DF.wide[["FALSE"]]
DF.wide$ratio2 <- DF.wide[["TRUE"]]/(DF.wide[["TRUE"]] + DF.wide[["FALSE"]])
# group FALSE TRUE ratio ratio2
# 1 Neither positive nor negative 469 207 0.4413646 0.3062130
# 2 Not Sure/Don’t Know 306 63 0.2058824 0.1707317
# 3 Somewhat negative 225 111 0.4933333 0.3303571
# 4 Somewhat positive 328 204 0.6219512 0.3834586
# 5 Very negative 76 34 0.4473684 0.3090909
# 6 Very positive 34 23 0.6764706 0.4035088
DF我建议修改您的数据:
DF <- read.table(text=' accept group number
1 FALSE "Very positive" 34
2 TRUE "Very positive" 23
3 FALSE "Somewhat positive" 328
4 TRUE "Somewhat positive" 204
5 FALSE "Neither positive nor negative" 469
6 TRUE "Neither positive nor negative" 207
7 FALSE "Somewhat negative" 225
8 TRUE "Somewhat negative" 111
9 FALSE "Very negative" 76
10 TRUE "Very negative" 34
11 FALSE "Not Sure/Don’t Know" 306
12 TRUE "Not Sure/Don’t Know" 63', header=TRUE)
library(reshape2)
DF.wide <- dcast(DF, group ~ accept, value.var="number")
DF.wide$ratio <- DF.wide[["TRUE"]]/DF.wide[["FALSE"]]
DF.wide$ratio2 <- DF.wide[["TRUE"]]/(DF.wide[["TRUE"]] + DF.wide[["FALSE"]])
# group FALSE TRUE ratio ratio2
# 1 Neither positive nor negative 469 207 0.4413646 0.3062130
# 2 Not Sure/Don’t Know 306 63 0.2058824 0.1707317
# 3 Somewhat negative 225 111 0.4933333 0.3303571
# 4 Somewhat positive 328 204 0.6219512 0.3834586
# 5 Very negative 76 34 0.4473684 0.3090909
# 6 Very positive 34 23 0.6764706 0.4035088
DF我建议修改您的数据:
DF <- read.table(text=' accept group number
1 FALSE "Very positive" 34
2 TRUE "Very positive" 23
3 FALSE "Somewhat positive" 328
4 TRUE "Somewhat positive" 204
5 FALSE "Neither positive nor negative" 469
6 TRUE "Neither positive nor negative" 207
7 FALSE "Somewhat negative" 225
8 TRUE "Somewhat negative" 111
9 FALSE "Very negative" 76
10 TRUE "Very negative" 34
11 FALSE "Not Sure/Don’t Know" 306
12 TRUE "Not Sure/Don’t Know" 63', header=TRUE)
library(reshape2)
DF.wide <- dcast(DF, group ~ accept, value.var="number")
DF.wide$ratio <- DF.wide[["TRUE"]]/DF.wide[["FALSE"]]
DF.wide$ratio2 <- DF.wide[["TRUE"]]/(DF.wide[["TRUE"]] + DF.wide[["FALSE"]])
# group FALSE TRUE ratio ratio2
# 1 Neither positive nor negative 469 207 0.4413646 0.3062130
# 2 Not Sure/Don’t Know 306 63 0.2058824 0.1707317
# 3 Somewhat negative 225 111 0.4933333 0.3303571
# 4 Somewhat positive 328 204 0.6219512 0.3834586
# 5 Very negative 76 34 0.4473684 0.3090909
# 6 Very positive 34 23 0.6764706 0.4035088
DF我建议修改您的数据:
DF <- read.table(text=' accept group number
1 FALSE "Very positive" 34
2 TRUE "Very positive" 23
3 FALSE "Somewhat positive" 328
4 TRUE "Somewhat positive" 204
5 FALSE "Neither positive nor negative" 469
6 TRUE "Neither positive nor negative" 207
7 FALSE "Somewhat negative" 225
8 TRUE "Somewhat negative" 111
9 FALSE "Very negative" 76
10 TRUE "Very negative" 34
11 FALSE "Not Sure/Don’t Know" 306
12 TRUE "Not Sure/Don’t Know" 63', header=TRUE)
library(reshape2)
DF.wide <- dcast(DF, group ~ accept, value.var="number")
DF.wide$ratio <- DF.wide[["TRUE"]]/DF.wide[["FALSE"]]
DF.wide$ratio2 <- DF.wide[["TRUE"]]/(DF.wide[["TRUE"]] + DF.wide[["FALSE"]])
# group FALSE TRUE ratio ratio2
# 1 Neither positive nor negative 469 207 0.4413646 0.3062130
# 2 Not Sure/Don’t Know 306 63 0.2058824 0.1707317
# 3 Somewhat negative 225 111 0.4933333 0.3303571
# 4 Somewhat positive 328 204 0.6219512 0.3834586
# 5 Very negative 76 34 0.4473684 0.3090909
# 6 Very positive 34 23 0.6764706 0.4035088
DF我使用此方法与警告一起重复获得相同的值。我使用此方法与警告一起重复获得相同的值。我使用此方法与警告一起重复获得相同的值。我使用此方法与警告一起重复获得相同的值。