为data.frame和tbl_df设置行和列

dez932000

Data.frame允许使用进行列子集的操作[,默认情况下将单个列/行的输出拖放到向量中。Dplyr故意不允许这样做似乎是因为编码绝对是一场噩梦)。

df <- data.frame(a = c(1:5,NA), b = c(1,1,1,2,2,2))
mean(df[,"a"], na.rm = T) # 3

dftbl <- as.tbl(df)
mean(dftbl[,"a"], na.rm = T) # NA

因此建议[[作为子集,因为这将为dfs和tbl_dfs提供统一的输出。但是:这仅适用于列或行,但不适用于行+列,并且如果您不检查警告,就可以忽略这种差异(这是我自己的错),例如:

dfresult <- mean(df[df$b == 2, "a"], na.rm = T) # 4.5
tblresult <- mean(dftbl[dftbl$b == 2, "a"], na.rm = T) # NA_real_

是否有人对行子集执行列操作有任何“最佳实践”建议?这是我应该dplyr使用filter改进我的游戏的地方select吗?到目前为止,我的尝试一直在碰壁。感谢任何黄金法则。提前致谢。

dftbl %>% filter(b == 2) %>% select(a) %>% mean(na.rm = T) #NA

这以相同的方式失败,过滤后的选定数据STILL是一个N * 1小标题,拒绝与一起玩mean

dftbl %>% filter(b == 2) %>% select(a) %>% as.data.frame() %>% .$a
# [1]  4  5 NA

dftbl %>% filter(b == 2) %>% select(a) %>% as.data.frame() %>% mean(.$a, na.rm = T)
# [1] NA
阿克伦

究其原因,是因为我们需要[[的,而不是[[它仍然是一个tibble有一列。mean期望输入作为vector

mean(dftbl[["a"]], na.rm = TRUE) 
#[1] 3

或使用 $

mean(dftb$a, na.rm = TRUE) 

关于第二种情况,select还返回带有所选列的标题。相反,我们可以使用pull提取为vector

dftbl[dftbl$b == 2, "a"] %>% 
    pull(1)
#[1]  4  5 NA

或者,如果我们不想加载任何库,请使用 unlist

mean(unlist(dftbl[dftbl$b == 2, "a"]), na.rm = TRUE)
#[1] 4.5

对于OP帖子中提到的代码

dftbl %>% 
    filter(b == 2) %>% 
    select(a)  %>%
     .$a %>%
     mean(., na.rm = TRUE)
#[1] 4.5

或搭配 pull

dftbl %>%
    filter(b == 2) %>% 
    pull(a) %>%
    mean(na.rm = TRUE)
#[1] 4.5

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

dplyr显示tbl_df中小data.frame的所有行和列

使用循环时tbl_df和data.frame的区别

as.tibble(),as_data_frame()和tbl_df()有什么区别?

如何转换从Excel中从““ tbl_df”“ tbl”“ data.frame”导入的数据集。到“ xts”?

无法将`spec_tbl_df / tbl_df / tbl / data.frame`对象转换为函数

奇怪:sapply无法在dplyr :: tbl_df()本地data.frame上工作

在R中使用ifelse()将变量分配给tbl_df / data.frame对象会导致R的内存不足

在tbl_df列表上进行映射和变异

修改矩阵并将列和行设置为零的算法

无法为WebGrid列和行设置宽度或高度

在 R 中将 tbl_df 结果转换和导出到 xlsx 时出错

当行不消失时,删除data.frame中的所有空列和行

从hist()分解为data.frame

使用bind_rows / data.frame时将列表元素的名称设置为列

使用上面data.frame中的行和另一列计算值

如何在R中创建具有匹配的行和列的data.frame列表

按列模式和绑定行R拆分data.frame

将行和列添加到 R 中的 data.frame

使用pycassa将键和行缓存设置为列族?

如果为列和行设置了模板,如何自动使CSS网格换行?

如何在Matlab中将前6行和所有列设置为0

提取单个dplyr tbl_df行作为矢量

显示/打印小标题的所有行(tbl_df)

R data.frame中df $ i和df [[i]]之间的差异

在gtsummary包中为R中的tbl_summary函数设置类别和连续变量的主题

将 Pandas Data Frame 列建模为类别列表

在dplyr tbl_df中删除列的最佳实践

为通过setRefClass创建的对象扩展as.data.frame和as.matrix方法

有条件地为类`sf` 和`data.frame` 的对象赋值