根据R中的多列条件查找百分比

根据R中的多列条件查找百分比,r,sum,match,apply,sumifs,R,Sum,Match,Apply,Sumifs,我有多个列,我想找出一个列在其他列中的百分比是相同的。比如, ST cd variable 1 1 23432 1 1 2345 1 2 908890 1 2 350435 1 2 2343432 2 1 9999 2 1 23432 所以我想做的是: 如果ST和cd相同,则查找该行在所有ST和cd相同的行中的变量百分比。因此,最终看起来是这样的: ST cd variable percentage 1 1 23432

我有多个列,我想找出一个列在其他列中的百分比是相同的。比如,

ST  cd  variable
1   1   23432
1   1   2345
1   2   908890
1   2   350435
1   2   2343432
2   1   9999
2   1   23432 
所以我想做的是:

如果ST和cd相同,则查找该行在所有ST和cd相同的行中的变量百分比。因此,最终看起来是这样的:

ST  cd  variable  percentage
1   1   23432     90.90%
1   1   2345      9.10%
1   2   908890    25.30%
1   2   350435    9.48%
1   2   2343432   65.23%
2   1   9999      29.91%
2   1   23432     70.09%
我在R怎么做


感谢所有帮助。

您可以创建比例格式函数:

library(data.table)

DT <- data.table(read.table(text = "ST  cd  variable
1   1   23432
1   1   2345
1   2   908890
1   2   350435
1   2   2343432
2   1   9999
2   1   23432 ", header = TRUE))

DT[, percentage := variable / sum(variable) , by = list(ST, cd)]

##    ST cd variable percentage
## 1:  1  1    23432 0.90902743
## 2:  1  1     2345 0.09097257
## 3:  1  2   908890 0.25227624
## 4:  1  2   350435 0.09726856
## 5:  1  2  2343432 0.65045519
## 6:  2  1     9999 0.29909366
## 7:  2  1    23432 0.70090634
prop_format <- 
function (x, digits=4) 
{
  x <- round(x/sum(x), digits)*100
  paste0(x,'%')
}

您可以创建比例格式函数:

prop_format <- 
function (x, digits=4) 
{
  x <- round(x/sum(x), digits)*100
  paste0(x,'%')
}
使用dplyr:

如果需要,可以对此进行修改:

dd %>% group_by(ST, cd) %>% mutate(percentage = round(variable/sum(variable)*100, 2))

#  ST cd variable percentage
#1  1  1    23432      90.90
#2  1  1     2345       9.10
#3  1  2   908890      25.23
#4  1  2   350435       9.73
#5  1  2  2343432      65.05
#6  2  1     9999      29.91
#7  2  1    23432      70.09
使用dplyr:

如果需要,可以对此进行修改:

dd %>% group_by(ST, cd) %>% mutate(percentage = round(variable/sum(variable)*100, 2))

#  ST cd variable percentage
#1  1  1    23432      90.90
#2  1  1     2345       9.10
#3  1  2   908890      25.23
#4  1  2   350435       9.73
#5  1  2  2343432      65.05
#6  2  1     9999      29.91
#7  2  1    23432      70.09

请参阅?ave.类似avevar、ST、cd、FUN=prop.table的内容。您想使用这些百分比进行进一步处理,还是需要最终输出?请注意,如果在值中添加%符号,则该列将强制为字符,因此对进一步的数字操作没有用处。请参见?ave.类似于avevar、ST、cd、FUN=prop.table的内容。是否要使用这些百分比进行进一步处理,或者这是您需要的最终输出?请注意,如果在值中添加%符号,则该列将强制为字符,因此对进一步的数字操作没有用处。工作正常,但我发现忽略prop_format函数并替换为FUN=prop.tableWorked更容易,但是我发现忽略prop_format函数更容易,而是用FUN=prop.table替换它