[英]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
我們能做到這一點的方法之一是創建使用嵌套數據幀enframe
從tibble
包。 完成此操作后,我們可以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.