我试图在下面df的底部创建一个额外的行,为每一列创建一个总数。这是用以下方法完成的 rbind(Men_15, colSums(Men_15[1:52,])
. 然而,由于前几行是因子而不是数字,我得到了错误信息:"'x'必须是数字"。我怎样才能让R忽略不相关的列,只对数字列进行求和呢?我还想把行命名为 "USA"。
structure(list(State = structure(1:52, .Label = c("Alabama",
"Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut",
"Delaware", "District of Columbia", "Florida", "Georgia", "Hawaii",
"Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky",
"Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan",
"Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska",
"Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York",
"North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon",
"Pennsylvania", "Puerto Rico", "Rhode Island", "South Carolina",
"South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia",
"Washington", "West Virginia", "Wisconsin", "Wyoming"), class = "factor"),
Men = c(2341093L, 384160L, 3299088L, 1451913L, 19087135L,
2648667L, 1751607L, 448413L, 306674L, 9600009L, 4883331L,
709871L, 810464L, 6316899L, 3235263L, 1534595L, 1439862L,
2164208L, 2261156L, 650081L, 2872643L, 3249650L, 4861973L,
2692166L, 1451723L, 2964003L, 510163L, 929606L, 1407735L,
653484L, 4343027L, 1032414L, 9541801L, 4795408L, 367963L,
5662893L, 1906944L, 1948453L, 6245344L, 1713860L, 510388L,
2322409L, 423477L, 3167756L, 13171316L, 1459229L, 308573L,
4060948L, 3487725L, 913631L, 2851385L, 295561L)), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -52L))
你得到的错误来自 colSums
因为你的第一列不是数字。
如果要在列状态中添加 "美国",你可以使用 as.character
. 在这种情况下,你可以简单地使用 sum
获取列的总和 men
.
Men_15$State <- as.character(Men_15$State)
Men_15 <- rbind(Men_15, list("USA", sum(Men_15$Men)))
tail(Men_15)
# State Men
#48 Virginia 4060948
#49 Washington 3487725
#50 West Virginia 913631
#51 Wisconsin 2851385
#52 Wyoming 295561
#53 USA 157448140
要获得 colSums
仅仅是形式 numeric
列,你必须用 is.numeric
喜欢。
colSums(Men_15[sapply(Men_15, is.numeric)])
# Men
#157448140