转换输入数据集

时间:2016-05-06 08:17:28

标签: r

我正在研究输入数据格式如下的要求。

Name XYZ AGE 30 Country India Mobile 1234567890
Name ABC AGE 35 Country Russia Mobile 2345678901

我想将这些数据导入R&想要重塑它。即"名称" " AGE" "国家" "移动"应该是列标题。

3 个答案:

答案 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)

matrixunlist的组合应该可以解决问题。像

tidyData <- data.frame(matrix(unlist(dataByLine), nrow=length(fileByLines), byrow=T),stringsAsFactors=F))

如果你有一个可重复的最小例子,这将更容易回答