2016-03-27 16 views
-3

Her öğenin bir sütunu içeren bir veri karesi olduğu bir liste (liste1) var.Bir liste içindeki veri çerçevelerinin sütun adlarını değiştirirken hata oluştu. R

Tüm kolon adları, "x" ile aynıdır. Sütun isimlerini "x1", "x2", ...., "xn" olarak değiştirmek istiyorum.

kod aşağıda kullanın:

lapply(list1, function(x) setNames(x, "x",paste("x",1:seq_along(list1)))) 

Ancak bu kod çalışmaz. Bu kod neden çalışmıyor? Herhangi bir yardım için çok memnun olacağım. Çok teşekkürler.

David Arenburg @

, (10 Liste1 olarak Elment sayıdır) aşağıdaki gibi kod düzenlendi: Bu kod hata vermez

lapply(list1, function(z) setNames(z,paste0("x",1:10))) 

ama aynı zamanda kolon isimde sütun adları değişmez ars hala "x".

Aşağıdakileri düzenledim, ancak hala çalışmıyor.

for(i in 1:10) 
{ 
    list2[[i]]<-setNames(data.frame(list1[[i]])[,1], paste0("x",1:10)[i]) 
} 

Şimdilik seq_along kaldırdım. İstenilen sonucu aldıktan sonra üzerinde çalışacağım.

Liste1'in her öğesi bir veri çerçevesidir ve her veri çerçevesinin yalnızca bir sütunu vardır.

+1

Bu yeniden üretilemez, ancak '1: seq_along (list1)' düzgün çalışmaz. 1: seq_along (mtcars) 'ı deneyin. Bu sadece “seq_along (mtcars)” olmalıdır. Ama sizin durumunuzda, 'x '' yi hala 'list1' 'den' seq_along'ya geçerken nasıl kullanacağınız net değil. Bu bana hiç mantıklı gelmiyor. Ayrıca, 'setNames' kullanımınız belirsizdir. 2 girdiye değil, 3'e sahip olmalı. Muhtemelen bu, 'yapıştır' değil 'yapıştırması' olmalıdır, çünkü muhtemelen isimlerinizin sentetik olarak geçerli olmasını istiyorsunuz. –

+0

Sonucu bir nesneye mi ataıyorsunuz? –

+0

'setNames' yerinde değişiklik yapmıyor. Bir yere ataman gerekiyor. Daha önce de belirttiğim gibi, [bu tekrarlanabilir değildir] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). Ve seq_along'a ne oldu? Ve "* bir sütundan oluşur" ile ne demek istiyorsun? Orada kaç tane sütun var? –

cevap

1

bir listesini yapmak çoklu veri çerçevelerinde her sütunun adını değiştirmek istiyorsanız, yapmanız gereken aşağıdaki:

# Artificial list with each data frame containing columns with values from 1 to 3 

list1 = list(data.frame(x = 1:3), data.frame(x = 1:3), data.frame(x = 1:3), 
     data.frame(x = 1:3), data.frame(x = 1:3), data.frame(x = 1:3), 
     data.frame(x = 1:3), data.frame(x = 1:3), data.frame(x = 1:3), 
     data.frame(x = 1:3)) 

# Assigning column names of individual data frames 

for(i in 1:length(list1)){ 
    colnames(list1[[i]]) = paste("x",i, sep = "") 
} 

Ben bunların her biri aynı içeren birden çok veri çerçeveleri içeren bir liste oluşturdu sütun x. Veri çerçevelerindeki sütunların isimlerini değiştirmek istediğiniz için, her bir veri çerçevesine setNames() içinde birden çok değer atamak hiçbir yardımı olmayacaktır. Bu nedenle, x'i tek değerlerle (listenizin 1'den uzunluğuna kadar) tek tek veri çerçevelerinin sütun adlarına yapıştırmanız gerekir.

İlgili konular