2016-05-06 3 views
-1

Я работаю над требованием, когда входные данные находятся в формате ниже.Преобразование данных ввода данных

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

Я хочу, чтобы импортировать эти данные в R & хочет, чтобы изменить его. то есть «Имя» «ВОЗРАСТ» «Страна» «Мобильный» должен быть заголовком столбца.

+0

Как хранятся данные? это в текстовом файле? Как ограничены поля? –

+0

Добро пожаловать в переполнение стека! Пожалуйста, прочитайте информацию о [как задать хороший вопрос] (http://stackoverflow.com/help/how-to-ask) и как дать [воспроизводимый пример] (http://stackoverflow.com/questions/ 5963269). Это облегчит вам помощь другим людям. – zx8754

ответ

0

Комбинация matrix и unlist должна сделать трюк. Как

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

Если вы имели минимальный воспроизводимый пример, это было бы легче ответить

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

Предполагая, что данные хранятся в 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 могут быть удалены 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 не нужен.

+0

Работал для меня .. Спасибо .. Попытка других предложений также .. будет обновлена ​​здесь с результатами .. – puneet

Смежные вопросы