首页 > 解决方案 > 在 R 中计算大于 20 的观察值

问题描述

我在 R 中有一个数据集 df 并试图获得大于 20 的观察数

sample input df:
df <- data.frame(Ensembl_ID = c("ENSG00000284662", "ENSG00000186827", "ENSG00000186891", "ENSG00000160072", "ENSG00000041988"), FS_glm_1_L_Ad_N1_233_233 = c(NA, "11.0704011098281", "18.5580644869131", NA, NA), FS_glm_1_L_Ad_N10_36_36 = c("25.5660669439994", NA, "17.7371918093936", "17.15620204154", NA), FS_glm_1_L_Ad_N2_115_115 = c("26.5660644083686", NA, "11.4006170885388", "17.9862691299736", "9.83546459757003" ), FS_glm_1_L_Ad_N3_84_84 = c("26.5660644053515", NA, "10.9591563938286", NA, NA), FS_glm_1_L_Ad_N4_65_65 = c("26.5660642078305", NA, "11.1498422647029", "10.5876449860129", "9.84781577969005"), FS_glm_1_L_Ad_N5_64_64 = c("26.5660688201853", NA, "18.613395947125", "10.5753792680759", "11.059101026016"), FS_glm_1_L_Ad_N6_55_55 = c("26.5660644039101", NA, "18.478237966938", "10.543187719545", NA), FS_glm_1_L_Ad_N7_32_32 = c("25.5660669436648", NA, "17.9467280294446", "10.0328888122706", NA), FS_glm_1_L_Ad_N8_31_31 = c("25.566069252448", NA, "17.6805603365895", "17.3419854603055", "9.81610669984747"))

class(df)
[1] "data.frame"

我试过了

length(which(as.vector(df[,-1]) > 20))
[1] 11

sum(df[,-1] > 20, na.rm=TRUE)
[1] 11

但是,实际发生的次数只有 8 次而不是 11 次,为什么会这样呢?

相同的脚本在另一个数据框中可以正常工作,但在这个 df 中不能正常工作。

标签: rdataframedataset

解决方案


数据是此数据框中的字符而不是数字。当数字是字符时,就会发生奇怪的事情。

"2" > "13"
#[1] TRUE

使用前将数据更改为数字sum

df[-1] <- lapply(df[-1], as.numeric)
sum(df[,-1] > 20, na.rm=TRUE)
#[1] 8

推荐阅读