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

我用R来分析一项调查。下面描述了一个示例数据帧。我想在DF中创建两个新列。第一个称为DF$ratio,应该找到每个组的TRUE和FALSE数量的比率。例如,新列的第二行应该是0.676(23/34),第四行应该是0.622(204/328)。第二个称为DF$ratio2,应该是每组的真数与真与假之和的比率。例如,新列的第二行应该是0.404(23/(23+34))。我是R的新手。有没有简单的方法来生成这些新列?谢谢

   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我使用此方法与警告一起重复获得相同的值。我使用此方法与警告一起重复获得相同的值。我使用此方法与警告一起重复获得相同的值。我使用此方法与警告一起重复获得相同的值。