Как получить доступ к столбцам data.frame с помощью $, за которым следует функция? - PullRequest
0 голосов
/ 20 февраля 2020

Скажи, что у меня есть df.

df<-data.frame(matrix(,ncol=3,nrow=2));
colnames(df)<-(c("day1","day2","day3"))

Конечно, теперь я могу получить доступ к первому столбцу с помощью df$day1. Однако вместо того, чтобы прямо указывать день 1, я иногда предпочитаю получить доступ в пределах al oop, например,

в al oop, где у меня есть val=3

Могу ли я получить доступ df$day3 чем-то вроде df$paste("day",val,sep="")?

Конечно, тот, который я написал, не будет работать.

1 Ответ

0 голосов
/ 20 февраля 2020

Вот небольшое путешествие в оба конца через возможности доступа, которые предоставляет R. Допустим, у нас есть эти данные:

set.seed(111)
df<-data.frame(
   day1 = paste0(sample(LETTERS[1:5], 2), rep(letters[1:2], 5)),
   day2 = runif(10),
   day3 = c(sample(9), NA),
   day4 = round(rnorm(10), 2)
)
df
   day1       day2 day3  day4
1    Ca 0.51492383    4  0.39
2    Db 0.37766322    7  0.80
3    Ca 0.41833733    6 -1.57
4    Db 0.01065785    2 -0.09
5    Ca 0.53229524    1 -0.36
6    Db 0.43216062    9 -1.19
7    Ca 0.09368152    3  0.36
8    Db 0.55577991    8  0.36
9    Ca 0.59022849    5  0.35
10   Db 0.06714114   NA  0.19

Вот несколько способов получить доступ к данным на фрейме данных:

# Access specific fields by indices:
df[5, 2] 
[1] 0.5322952

# Access specific row:
df[2,]
  day1      day2 day3 day4
2   Db 0.3776632    7  0.8

# Access specific column:
df[,3]
 [1]  4  7  6  2  1  9  3  8  5 NA

# Access more than one specific row/column:
df[c(1, 3) ,]
  day1      day2 day3  day4
1   Ca 0.5149238    4  0.39
3   Ca 0.4183373    6 -1.57

df[ ,c(1, 3:4)]
   day1 day3  day4
1    Ca    4  0.39
2    Db    7  0.80
3    Ca    6 -1.57
4    Db    2 -0.09
5    Ca    1 -0.36
6    Db    9 -1.19
7    Ca    3  0.36
8    Db    8  0.36
9    Ca    5  0.35
10   Db   NA  0.19

# Access by subsetting on rows with specific values:
df[df$day1=="Ca" ,]
  day1       day2 day3  day4
1   Ca 0.51492383    4  0.39
3   Ca 0.41833733    6 -1.57
5   Ca 0.53229524    1 -0.36
7   Ca 0.09368152    3  0.36
9   Ca 0.59022849    5  0.35

# Access with regular expression:
df[grep("a", df$day1),]
  day1       day2 day3  day4
1   Ca 0.51492383    4  0.39
3   Ca 0.41833733    6 -1.57
5   Ca 0.53229524    1 -0.36
7   Ca 0.09368152    3  0.36
9   Ca 0.59022849    5  0.35

# Access via NA:
df[is.na(df$day3), ]
   day1       day2 day3 day4
10   Db 0.06714114   NA 0.19

# Access with mixture of index and column name:
df[3, "day2"] 
[1] 0.4183373

# Access with mixture of index and several column names at once
df[2, paste0("day", 1:3)]
  day1      day2 day3
2   Db 0.3776632    7

И я уверен, что есть и другие способы!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...