将多个公式应用于R中数据帧的选定列

将多个公式应用于R中数据帧的选定列,r,function,R,Function,使用我的数据集“chile2”,我正在进行以下计算: Tab<-with(chile2,table(Q27,Q12_1_TEXT)) Tab<-as.data.frame.matrix(Tab) 可在此之后添加“全部”行 还有其他更好的方法吗 dput(chile2) structure(list(Q27 = structure(c(2L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 1L, 2

使用我的数据集“chile2”,我正在进行以下计算:

Tab<-with(chile2,table(Q27,Q12_1_TEXT))
Tab<-as.data.frame.matrix(Tab)
可在此之后添加“全部”行

还有其他更好的方法吗

dput(chile2)

structure(list(Q27 = structure(c(2L, 1L, 2L, 2L, 1L, 2L, 2L, 
2L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 1L, 2L, 2L), .Label = c("Si", 
"No"), class = "factor"), Q12_1_TEXT = c("Abertis Autopistas S.a.", 
"Accenture", "Adessa Falabella", "Administradora de Fondos de Cesantía", 
"AES GENER S.A.", "AFP HABITAT S.A.", "Agrícola Ariztía", "Agrosuper S.A.", 
"Aguas de Antofagasta S.A.", "AIG Chile Compañía de Seguros Generales S.A.", 
"Arcos Dorados Restaurantes de Chile Ltda", "Artel", "Arval - Relsa", 
"Banchile Inversiones", "BANCO INTERNACIONAL", "BASF CHILE SA", 
"BBVA Chile", "BOEHRINGER INGELHEIM LTDA", "Bredenmaster S.A.", 
"Caja de Compensación 18 de Septiembre")), class = c("data.table", 
"data.frame"), row.names = c(NA, -20L), .internal.selfref = <pointer: 0x0000000000100788>, .Names = c("Q27", 
"Q12_1_TEXT"))
dput(chile2)
结构(列表)(Q27=结构(c(2L,1L,2L,2L,1L,2L,
2L,2L,1L,2L,1L,2L,2L,1L,2L,1L,1L,2L,2L,2L),标签=c(“Si”,
“否”,class=“factor”),Q12_1_TEXT=c(“Abertis Autopistas S.a.”,
“埃森哲”、“阿德萨·法拉贝拉”、“塞萨蒂亚基金会管理人”,
“AES GENER S.A.”、“AFP HABITAT S.A.”、“Agrícola AriztíA”、“Agrosper S.A.”,
“Aguas de Antofagasta S.A.”,“AIG智利通用公司S.A.”,
“Arcos Dorados智利餐厅”、“Artel”、“Arval-Relsa”,
“智利银行”、“国际银行”、“巴斯夫智利银行”,
“BBVA智利”、“勃林格英格尔海姆有限公司”、“Bredenmaster S.A.”,
“第18号宪法汇编”)),class=c(“data.table”,
“data.frame”),row.names=c(NA,-20L),.internal.selfref=,.names=c(“Q27”,
“Q12_1_文本”))

d播放
chile2
数据以获得Q27变量的长度。然后使用
prop.table
查找比例,并使用
paste0()将其附加“%”字符

输出:

str(Tab)
# Classes ‘data.table’ and 'data.frame':    3 obs. of  22 variables:
# $ Q27                                         : chr  "Si" "No" "ALL"
# $ AES GENER S.A.                              : chr  "100%" "0%" "1"
# $ AFP HABITAT S.A.                            : chr  "0%" "100%" "1"
# $ AIG Chile Compañía de Seguros Generales S.A.: chr  "100%" "0%" "1"
# $ Abertis Autopistas S.a.                     : chr  "0%" "100%" "1"
# $ Accenture                                   : chr  "100%" "0%" "1"
# $ Adessa Falabella                            : chr  "0%" "100%" "1"
# $ Administradora de Fondos de Cesantía        : chr  "0%" "100%" "1"
# $ Agrosuper S.A.                              : chr  "0%" "100%" "1"
# $ Agrícola Ariztía                            : chr  "0%" "100%" "1"
# $ Aguas de Antofagasta S.A.                   : chr  "0%" "100%" "1"
# $ Arcos Dorados Restaurantes de Chile Ltda    : chr  "0%" "100%" "1"
# $ Artel                                       : chr  "100%" "0%" "1"
# $ Arval - Relsa                               : chr  "0%" "100%" "1"
# $ BANCO INTERNACIONAL                         : chr  "100%" "0%" "1"
# $ BASF CHILE SA                               : chr  "0%" "100%" "1"
# $ BBVA Chile                                  : chr  "100%" "0%" "1"
# $ BOEHRINGER INGELHEIM LTDA                   : chr  "100%" "0%" "1"
# $ Banchile Inversiones                        : chr  "0%" "100%" "1"
# $ Bredenmaster S.A.                           : chr  "0%" "100%" "1"
# $ Caja de Compensación 18 de Septiembre       : chr  "0%" "100%" "1"
# $ Total                                       : chr  "35%" "65%" "20"
# - attr(*, ".internal.selfref")=<externalptr> 
str(选项卡)
#类“data.table”和“data.frame”:3个obs。在22个变量中:
#$Q27:chr“Si”“No”“ALL”
#$AES GENER S.A.:chr“100%”“0%”“1”
#$AFP HABITAT S.A.:chr“0%”“100%”“1”
#$AIG智利通用汽车公司:chr“100%”“0%”“1”
#$Abertis Autopistas S.a.:chr“0%”“100%”“1”
#$Accenture:chr“100%”“0%”“1”
#$Adessa Falabella:chr“0%”“100%”“1”
#$Administradora de Fondos de Cesantía:chr“0%”“100%”“1”
#$Agrosuper S.A.:chr“0%”“100%”“1”
#$Agrícola Ariztía:chr“0%”“100%”“1”
#$Aguas de Antofagasta S.A.:chr“0%”“100%”“1”
#$Arcos Dorados智利餐厅有限公司:chr“0%”“100%”“1”
#$Artel:chr“100%”“0%”“1”
#$Arval-Relsa:chr“0%”“100%”“1”
#$BANCO国际:chr“100%”“0%”“1”
#$BASF CHILE SA:chr“0%”“100%”“1”
#$BBVA智利:chr“100%”“0%”“1”
#$BOEHRINGER INGELHEIM LTDA:chr“100%”“0%”“1”
#$Banchile Inversiones:chr“0%”“100%”“1”
#$Bredenmaster S.A.:chr“0%”“100%”“1”
#$Caja de Compensación 18 de Septiembre:chr“0%”“100%”“1”
#$Total:chr“35%”“65%”“20”
#-attr(*,“.internal.selfref”)=

我们可以使用
baser
使用
addmargins
prop.table
来实现这一点。从OP帖子中的
表格
输出中,应用
属性表格
,并将
边距
指定为2(对于列)。使用
addmargins
创建
Sum
行。然后,我们将除最后一行之外的行乘以100,并将
%
粘贴到值中

res <- addmargins(prop.table(Tab, 2), 1)
res[-nrow(res),] <- paste0(res[-nrow(res), ] * 100, "%")
dimnames(res)[[1]][3] <- "All"
names(dimnames(res)) <- NULL
res[,1:3]
#   Abertis Autopistas S.a. Accenture Adessa Falabella
#Si  0%                      100%      0%              
#No  100%                    0%        100%            
#All 1                       1         1           

res您可能需要
addmargins(100*prop.table(Tab,2),1)
这是一个错误-margin中的错误。table(x,margin):“x”不是一个array@SandhyaGhildiyal我只使用了基于您提供的“智利”数据的
选项卡
输出。它没有给我任何问题这一个的工作,我现在试图了解它是如何工作的,谢谢如果我用-Tab2%mutate(“total”=行和(Tab[,2:ncol(Tab)])向Tab添加一个总计列,那么您建议的代码给出错误:error in
[.data.frame
(Tab2,
:=
(2:ncol(Tab2),lapply(.SD,function(x)paste0(prop.table(x)*:未使用的参数(.SDcols=-1)我认为这是因为Tab2不是数据表。我在问题中显示的输出是我想要的。您的代码运行良好。数据表问题已解决。但在此之后使用rbind添加“All”行无效。rbind(Tab2,c(“All”,colSums(Tab2[,2:ncol(Tab2)])是的,我添加了将Q27转换为字符的代码,然后旧代码也可以工作。是因为rbind是这样工作的吗?
library('data.table')
Tab <- dcast(chile2, Q27 ~ Q12_1_TEXT, fun.aggregate = length, value.var = 'Q12_1_TEXT')
Tab[, Q27 := as.character(Q27)]  # convert column one from factor to character
Tab[, Total := rowSums(.SD), .SDcols = -1 ]  # add Total column
ALL <- as.list( c( Q27 = "ALL", colSums(Tab[, 2:ncol(Tab)]) ) )  # create ALL row
Tab[, 2:ncol(Tab) := lapply(.SD, function(x) paste0( prop.table(x)*100, "%")), .SDcols = -1 ]  # find proportions
Tab <- rbindlist(l = list(Tab, ALL)) # row bind Tab and ALL
str(Tab)
# Classes ‘data.table’ and 'data.frame':    3 obs. of  22 variables:
# $ Q27                                         : chr  "Si" "No" "ALL"
# $ AES GENER S.A.                              : chr  "100%" "0%" "1"
# $ AFP HABITAT S.A.                            : chr  "0%" "100%" "1"
# $ AIG Chile Compañía de Seguros Generales S.A.: chr  "100%" "0%" "1"
# $ Abertis Autopistas S.a.                     : chr  "0%" "100%" "1"
# $ Accenture                                   : chr  "100%" "0%" "1"
# $ Adessa Falabella                            : chr  "0%" "100%" "1"
# $ Administradora de Fondos de Cesantía        : chr  "0%" "100%" "1"
# $ Agrosuper S.A.                              : chr  "0%" "100%" "1"
# $ Agrícola Ariztía                            : chr  "0%" "100%" "1"
# $ Aguas de Antofagasta S.A.                   : chr  "0%" "100%" "1"
# $ Arcos Dorados Restaurantes de Chile Ltda    : chr  "0%" "100%" "1"
# $ Artel                                       : chr  "100%" "0%" "1"
# $ Arval - Relsa                               : chr  "0%" "100%" "1"
# $ BANCO INTERNACIONAL                         : chr  "100%" "0%" "1"
# $ BASF CHILE SA                               : chr  "0%" "100%" "1"
# $ BBVA Chile                                  : chr  "100%" "0%" "1"
# $ BOEHRINGER INGELHEIM LTDA                   : chr  "100%" "0%" "1"
# $ Banchile Inversiones                        : chr  "0%" "100%" "1"
# $ Bredenmaster S.A.                           : chr  "0%" "100%" "1"
# $ Caja de Compensación 18 de Septiembre       : chr  "0%" "100%" "1"
# $ Total                                       : chr  "35%" "65%" "20"
# - attr(*, ".internal.selfref")=<externalptr> 
res <- addmargins(prop.table(Tab, 2), 1)
res[-nrow(res),] <- paste0(res[-nrow(res), ] * 100, "%")
dimnames(res)[[1]][3] <- "All"
names(dimnames(res)) <- NULL
res[,1:3]
#   Abertis Autopistas S.a. Accenture Adessa Falabella
#Si  0%                      100%      0%              
#No  100%                    0%        100%            
#All 1                       1         1