簡體   English   中英

在R中操縱數據框列表的列

[英]Manipulating columns of a list of dataframes in R

我有一個數據幀列表,我想在每個數據幀中添加一列,此列將是行號和另一個變量的串聯。

我已經使用for循環做到了這一點,但是在處理大型數據集時會花費很多時間,有沒有辦法避免for循環?

my_data_vcf <-lapply(my_vcf_files,read.table, stringsAsFactors = FALSE)
for i in 1:length(my_data_vcf){
        for(j in 1:length(my_data_vcf[[i]]){ 
             my_data_vcf[[i]] <- cbind(my_data_vcf[[i]], "Id" = paste(c(variable,j), collapse = "_"))}}

您可以使用lapply ; 由於您沒有提供最少的樣本數據集,因此我正在生成一些樣本數據。

# Sample list of data.frame's
lst  <- list(
    data.frame(one = letters[1:10], two = 1:10),
    data.frame(one = letters[11:20], two = 11:20))

# Concatenate row number with entries in second column
lapply(lst, function(x) { x$three <- paste(1:nrow(x), x$two, sep = "_"); x })
#[1]]
#   one two three
#1    a   1   1_1
#2    b   2   2_2
#3    c   3   3_3
#4    d   4   4_4
#5    e   5   5_5
#6    f   6   6_6
#7    g   7   7_7
#8    h   8   8_8
#9    i   9   9_9
#10   j  10 10_10
#
#[[2]]
#   one two three
#1    k  11  1_11
#2    l  12  2_12
#3    m  13  3_13
#4    n  14  4_14
#5    o  15  5_15
#6    p  16  6_16
#7    q  17  7_17
#8    r  18  8_18
#9    s  19  9_19
#10   t  20 10_20    

我們能做到這一點的方法之一是創建使用嵌套數據幀enframetibble包。 完成此操作后,我們可以unnest數據並使用mutate連接行號和列:

library(tidyverse)

# using Maurits Evers' data, treating stringsAsFactors
lst <- list(
  data.frame(one = letters[1:10], two = 1:10, stringsAsFactors = F),
  data.frame(one = letters[11:20], two = 11:20, stringsAsFactors = F)
)

lst %>% 
  enframe() %>% 
  unnest(value) %>% 
  group_by(name) %>% 
  mutate(three = paste(row_number(), two, sep = "_")) %>% 
  nest()

返回值:

 # A tibble: 2 x 2 name data <int> <list> 1 1 <tibble [10 × 3]> 2 2 <tibble [10 × 3]> 

如果unnest數據,我們可以看到var three是var two和行號的串聯:

lst %>% 
  enframe() %>% 
  unnest(value) %>% 
  group_by(name) %>% 
  mutate(three = paste(row_number(), two, sep = "_")) %>% 
  nest() %>% 
  unnest(data)

返回值:

 # A tibble: 20 x 4 name one two three <int> <chr> <int> <chr> 1 1 a 1 1_1 2 1 b 2 2_2 3 1 c 3 3_3 4 1 d 4 4_4 5 1 e 5 5_5 6 1 f 6 6_6 7 1 g 7 7_7 8 1 h 8 8_8 9 1 i 9 9_9 10 1 j 10 10_10 11 2 k 11 1_11 12 2 l 12 2_12 13 2 m 13 3_13 14 2 n 14 4_14 15 2 o 15 5_15 16 2 p 16 6_16 17 2 q 17 7_17 18 2 r 18 8_18 19 2 s 19 9_19 20 2 t 20 10_20 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM