如何在R中向表中添加列

如何在R中向表中添加列,r,R,我已经将交叉制表和table()应用于我的dataframe的两列,得到了如下结果 现在我想在这里添加一个新的列和行总数,但当我尝试这个 tablaCruzada$Total<-0 tablaCruzada$Total首先将表格转换为数据帧/矩阵,然后使用行和添加新列 temp <- table(mtcars$cyl, mtcars$am) df <- as.data.frame.matrix(temp) df$Total <- rowSums(df) #Or if

我已经将交叉制表和table()应用于我的dataframe的两列,得到了如下结果

现在我想在这里添加一个新的列和行总数,但当我尝试这个

tablaCruzada$Total<-0

tablaCruzada$Total首先将
表格
转换为数据帧/矩阵,然后使用
行和
添加新列

temp <- table(mtcars$cyl, mtcars$am)
df <- as.data.frame.matrix(temp)
df$Total <- rowSums(df)
#Or if you just want to initialize
#df$Total <- 0
df

#   0 1 Total
#4  3 8    11
#6  4 3     7
#8 12 2    14
使用
mtcars
中的可复制示例

temp <- table(mtcars$cyl, mtcars$am)
df <- as.data.frame.matrix(temp)
df$Total <- rowSums(df)
#Or if you just want to initialize
#df$Total <- 0
df

#   0 1 Total
#4  3 8    11
#6  4 3     7
#8 12 2    14

temp您可能需要浏览
jantitor
软件包。下面是一个使用
iris
dataset的示例:

library(dplyr)
library(janitor)

iris %>% 
  tabyl(Sepal.Length, Species) %>% 
  adorn_totals(where = "col")

# Sepal.Length setosa versicolor virginica Total
# 4.3      1          0         0     1
# 4.4      3          0         0     3
# 4.5      1          0         0     1
# 4.6      4          0         0     4
# 4.7      2          0         0     2
# 4.8      5          0         0     5
# ....
  • tabyl()
    提供了一个双向频率表,其中的结果是data.frame
  • adorn_totals()
    包含一列总计

此外,根据@Ronak的数据,使用
apply

df$Total <- apply(df, 1, sum)
df
   0 1 Total
4  3 8    11
6  4 3     7
8 12 2    14

df$Total使用
as.data.frame(tablaCruzada)
dplyr::as_tible(tablaCruzada)
将矩阵转换为表,然后使用
tablaCruzada$Total这是否回答了您的问题?如果将表对象转换为dataframe对象,则会丢失列。我只有3列。var1带有名称,var2带有项目代码,freq带有按项目计算的总和,我希望看到我的所有表格列加上一个ore,每个行的总和您介意使用
dput(head(tablaCruzada))
共享示例数据吗?这是dput的文件结果;为什么要使用
apply(df,1,sum)
对每行进行求和,而不是
rowSums(df)
?这是低效的。当我把一个问题发到你的邮箱时,我总是很感激有多种解决方案,因为我可以从中学习,即使答案可能在效率上有所不同。在一个问题上效率落后的解决方案可能在其他问题上效率高于其他解决方案。@Darren Tsai忘了对你的评估说一句“它效率低下”。你如何衡量效率?在我看来,主要的标准是代码是否完成了它应该完成的任务。情况就是这样。因此,您必须应用其他标准来评估效率。在评估某人的解决方案时,指定该标准可能是一个好主意。如果没有这样的说明,评估就会显得粗鲁。我没有冒犯的意思。为了关注如何对数据集的每一行求和,
rowSums()
是R中的“标准”方法。例如,如果需要对许多数字求和,则必须使用
sum()
而不是编写For循环。这就是我说“标准”的原因。此外,
apply(df,1,sum)
确实更耗时。这就是为什么我说“效率低下”。您可以使用以下代码进行测试:
m Fair point。但是OP中没有任何迹象表明他们拥有如此巨大的数据帧,以至于在瞬间的差异会让人感觉到。即使大小确实重要,将
apply(df,1,sum)
限定为“低效”也是不公平的,应该用show_na和&sum(is.na(result[[1]])中的“低效”tabyl(df$JefeProyecto,df$Proyecto)错误替换>0:在'x&&y'df$JefeProyecto is character和df$Proyecto numericThanks中的'x'类型无效。密钥为.data.frame.matrix()。我需要矩阵不丢失我的列