首页 > 解决方案 > 如何使用列的名称读取或为 tibble 中的单个单元格分配值?

问题描述

我正在学习tidyverse并遇到了最简单操作的问题:读取单个单元格并将值分配给单个单元格。我需要通过匹配另一列中的特定值并调用我想要更改其值的列的名称来做到这一点(所以我不能使用数字行号和列号)。

我已经在网上和 SO 上搜索并阅读了 tibble 文档(这似乎是最适用的https://tibble.tidyverse.org/reference/subsetting.html?q=cell)并且没有找到答案。(我可能遗漏了一些东西 - 为这个问题的简单性道歉,如果它在其他地方得到了回答)

test<-tibble(x = 1:5, y = 1, z = x ^ 2 + y)

产量:

 A tibble: 5 x 3
      x     y     z
  <int> <dbl> <dbl>
1     1     1     2
2     2     1     5
3     3     1    10
4     4     1    17
5     5     1    26

test["x"==3,"z"]

产量:

 A tibble: 0 x 1
 … with 1 variable: z <dbl>

但没有告诉我那个细胞的价值。

当我尝试分配一个值时......

test["x"==3,"z"]<-20

...这没用。

test[3,3] 这可行,但如上所述,我需要通过名称而不是数字来调用单元格。

这样做的正确方法是什么?

标签: rvariable-assignmenttibble

解决方案


它不是数据表。如果我们使用方法,则使用orbase R提取列“x”test$xtest[["x"]]

test[test$x == 3, "z"]
# A tibble: 1 x 1
#     z
#  <dbl>
#1    10

或使用subset

subset(test, x == 3, select = 'z')

或与dplyr

library(dplyr)
test %>%
       filter(x == 3) %>%
       select(z)

或者如果我们想传递一个字符串作为列名,转换为symbol 并计算

test %>% 
    filter(!!  rlang::sym("x") == 3) %>% 
    select(z)

或与data.table

library(data.table)
as.data.table(test)[x == 3, .(z)]
#    z
#1: 10

推荐阅读