Как прочитать или присвоить значение отдельной ячейке в таблице, используя имя столбца? - PullRequest
1 голос
/ 08 января 2020

Я изучаю tidyverse и столкнулся с проблемой простейших операций: чтение и присвоение значения одной ячейке. Мне нужно сделать это путем сопоставления значения спецификаций c в другом столбце и вызова имени столбца, значение которого я хочу изменить (поэтому я не могу использовать цифры c номеров строк и столбцов).

Я искал в Интернете и на SO, читал документацию по тибблу (это кажется наиболее подходящим 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] Это работает, но, как указано выше, мне нужно вызывать ячейку по именам, а не по номерам.

Как правильно это сделать?

1 Ответ

2 голосов
/ 08 января 2020

Это не таблица данных. Если мы используем base R методы, столбцы «x» извлекаются с помощью test$x или test[["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)

Или, если мы хотим передать строку в качестве имени столбца, преобразовать в sym бол и оценить

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

Или с помощью data.table

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