Имя я в цикле - R - PullRequest
       18

Имя я в цикле - R

0 голосов
/ 16 мая 2018

Я пытаюсь извлечь имя столбца i, используемого в цикле:

for (i in df){
  print(name(i))
}

Пример решения кода Python:

for i in df:
  print(i)

PS: R дает мнезначения столбца Если я использую тот же код, что и Python (но python дает только имя).

EDIT: Это должен быть в цикле.Как я буду делать более сложные вещи с этим.

Ответы [ 4 ]

0 голосов
/ 16 мая 2018

Просто выполните

names(df)

, чтобы напечатать все имена столбцов в df.Нет необходимости в цикле, если вы не хотите делать что-то более сложное с каждым столбцом.

Если вам нужно имя i-го столбца:

names(df)[i]
0 голосов
/ 16 мая 2018

Вы можете попробовать следующий код:

# Simulating your data
a <- c(1,2,3)
b <- c(4,5,6)

df <- data.frame(a, b)

# Answer 1
for (i in 1:ncol(df)){
  print(names(df)[i]) # acessing the name of column
  print(df[,i]) # acessing column content
  print('----')
}

Или эту альтернативу:

# Answer 2
columns <- names(df)

for(i in columns) {
  print(i) # acessing the name of column
  print(df[, i]) # acessing column content
  print('----')
}

Надеюсь, это поможет!

0 голосов
/ 16 мая 2018

Вместо цикла вы можете использовать функцию imap из пакета purrr. При написании кода .x является объектом, а .y является именем.

df <- data.frame(a = 1:10, b = 21:30, c = 31:40)

library(purrr)

imap(df, ~paste0("The name is ", .y, " and the sum is ", sum(.x)))

# $a
# [1] "The name is a and the sum is 55"
# 
# $b
# [1] "The name is b and the sum is 255"
# 
# $c
# [1] "The name is c and the sum is 355"

Это просто более удобный способ написания следующего кода Base R, который дает тот же результат:

Map(function(x, y) paste0("The name is ", y, " and the sum is ", sum(x))
    , df, names(df))
0 голосов
/ 16 мая 2018
for (i in names(df)){
  print(i)
}
...