Изменить кадры данных в списке с помощью R - PullRequest
0 голосов
/ 15 ноября 2018

Я хочу работать со столбцами и именами строк набора фреймов данных, скажем W1 , W2 , W3 , чьи имена перечислены вранее построенный список, скажем W .Я видел довольно много похожих вопросов, но, похоже, ни один из них не решает мою проблему:

>  W <- list(W1, W2, W3)
>  lapply(W, is.data.frame)
$W1
[1] TRUE
$W2
[1] TRUE
$W3
[1] TRUE

В конечном итоге я хочу сделать следующее:

>  lapply(W, function(x) rowname(x) = x[,1])
>  lapply(W, function(x) x = x[,-1])
  • определяет строку-имена для каждого фрейма данных, используя значения его первого столбца.
  • подавить первый столбец после этого,

, но в обоих случаях я получаю содержимое первого столбца для каждого фрейма данных,Мне не хватает чего-то простого ...

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

С tidyverse с использованием данных @ Taiki-Sakai:

library(tidyverse)
map(W, column_to_rownames, "a") # use remove_rownames(W) if relevant
# [[1]]
#   b c
# a 1 4
# b 2 5
# c 3 6
# 
# [[2]]
#   b c
# d 4 5
# e 5 6
# 
# [[3]]
#   b  c
# A 1 11
# B 2 12
# C 3 13
# D 4 14
# E 5 15
# 
0 голосов
/ 15 ноября 2018

Просто объедините два шага в один lapply. Помните, что в R функция будет возвращать последнюю вещь, которую она оценивает, поэтому в вашем первом lapply она просто будет возвращать rownames каждого data.frame, так как это последнее, что сделала функция. Добавление x[,-1] после этого заставляет его вернуть измененный data.frame минус первый столбец.

W1 <- data.frame(a=letters[1:3], b=1:3, c=4:6)
W2 <- data.frame(a=letters[4:5], b=4:5, c=5:6)
W3 <- data.frame(a=LETTERS[1:5], b=1:5, c=11:15)
W <- list(W1, W2, W3)

W <- lapply(W, function(x) {
    row.names(x) <- x[,1]
    x[,-1]
})
...