我正在研究输入数据格式如下的要求。
Name XYZ AGE 30 Country India Mobile 1234567890
Name ABC AGE 35 Country Russia Mobile 2345678901
我想将这些数据导入R&想要重塑它。即"名称" " AGE" "国家" "移动"应该是列标题。
答案 0 :(得分:1)
如何首先使用值创建数据框,然后按如下所示添加名称,
x <- c('Name XYZ AGE 30 Country India Mobile 1234567890',
'Name ABC AGE 35 Country Russia Mobile 2345678901')
df <- as.data.frame(do.call(rbind, lapply(strsplit(x, ' '), function(i) i[c(FALSE, TRUE)])))
names(df) <- unlist(strsplit(x[1], ' '))[c(TRUE, FALSE)]
df
# Name AGE Country Mobile
#1 XYZ 30 India 1234567890
#2 ABC 35 Russia 2345678901
答案 1 :(得分:1)
假设数据存储在data.frame df1
df1 <- read.table(text="Name XYZ AGE 30 Country India Mobile 1234567890
Name ABC AGE 35 Country Russia Mobile 2345678901")
您可以通过选择每秒(偶数)列来创建新的data.frame df2
df2 <- df1[c(FALSE,TRUE)]
并使用df1
第一行中的每秒(奇数)条目分配列名:
colnames(df2) <- unlist(df1[1, c(TRUE, FALSE)])
然后可以使用df1
删除data.frame rm(df1)
。这是df2
:
#> df2
# Name AGE Country Mobile
#1 XYZ 30 India 1234567890
#2 ABC 35 Russia 2345678901
同样的程序可以写成一行。可以说不太清楚,但肯定更紧凑:
df1 <- `colnames<-`(df1[c(FALSE,TRUE)], unlist(df1[1,c(TRUE,FALSE)]))
在这种情况下,不需要第二个data.frame df2
。
答案 2 :(得分:0)
matrix
和unlist
的组合应该可以解决问题。像
tidyData <- data.frame(matrix(unlist(dataByLine), nrow=length(fileByLines), byrow=T),stringsAsFactors=F))
如果你有一个可重复的最小例子,这将更容易回答