这应该是一个基本问题,可能有重复,但我似乎无法找到它们,所以请耐心等待并指给我正确的位置。谢谢!不同数据类型的绑定数据帧
我有一个数据框,包含可能的NA和缺失值的整数。我正在计算行方式(将NAs设置为零),列方式(跳过NAs)。然后,我想创建一个包含整数的数据框架(或表格)以及行方式和列方式。下面是一个例子的数据帧:
df <- data.frame(
'ID' = c("123A","456B","789C","1011","1213")
, 'Test 1' = c(55,65,60,NA,50)
, 'Test 2' = c(45,48,50,52,55)
, 'Test 3' = c(51,49,55,69,61)
)
df
ID Test.1 Test.2 Test.3
1 123A 55 45 51
2 456B 65 48 49
3 789C 60 50 55
4 1011 NA 52 69
5 1213 50 55 61
这里是计算列中的功能意味着跳过的NA:
colMean <- function(df, na.rm = TRUE) {
if (na.rm) {
n <- rowSums(!is.na(df))
} else {
n <- ncol(df)
}
colMean <- colMeans(df, na.rm=na.rm)
return(rbind(df, "colMean" = colMean))
}
这里是计算行装置设定的NA到零功能:
rowMeanz <- function(df) {
df[is.na(df)] <- 0
return(cbind(df, "rowMean" = rowMeans(df)))
}
一个问题是,rbind更改数据类型,意味着整数在标为“Test.1”的列中转换为浮点数(或似乎是):
colMean(df[sapply(df, is.numeric)])
Test.1 Test.2 Test.3
1 55.0 45 51
2 65.0 48 49
3 60.0 50 55
4 NA 52 69
5 50.0 55 61
colMean 57.5 50 57
在你的回答中,我非常感谢解释为什么在这种情况下只有第一列看起来受到影响。它与列中是否存在NA有关?
我还没有与其他功能观察到了同样的问题,基于cbind:
rowMeanz(df[sapply(df, is.numeric)])
Test.1 Test.2 Test.3 rowMean
1 55 45 51 50.33333
2 65 48 49 54.00000
3 60 50 55 55.00000
4 0 52 69 40.33333
5 50 55 61 55.33333
最后,我想获得数据帧或表是这样的:
ID Test.1 Test.2 Test.3 rowMean
1 123A 55 45 51 50.33333
2 456B 65 48 49 54.00000
3 789C 60 50 55 55.00000
4 1011 NA 52 69 40.33333
5 1213 50 55 61 55.33333
6 colMean 57.5 50 57
如果你能告诉我如何在不太多的步骤中做到这一点,我将不胜感激。我愿意基于R的答案,以及基于软件包的答案。这些计算将在一个闪亮的应用程序内在线完成,所以我特别希望看到有效的方法。非常感谢!
'57.5'不是一个整数,因此该列中的所有元素都不能作为整数存储。 – joran
好的,我现在看到,与NA无关,谢谢。那么你会如何建议将整数显示为整数,其余部分是浮点数?我的最终目的是将数据显示在表格中。谢谢。 – PatrickT