строка данных в строку с именами столбцов - PullRequest
0 голосов
/ 09 ноября 2018

Мой ДФ

name  age
tom    21
mary   42

Как мне объединить каждый ряд во что-то вроде

name:tom,age:21
name:mary,age:42

вывод может быть списком строк.

Ответы [ 3 ]

0 голосов
/ 09 ноября 2018

Более общий подход с использованием apply.

apply(df1, 1, function(x) {n <- names(df1); paste0(n[1],":",x[1],",", n[2],":",x[2], collapse = "")})

вот супер общая версия:

df1<-
structure(list(name = c("tom", "mary"), age = c(21L, 42L), cool = c("yes", 
"no")), row.names = c(NA, -2L), class = "data.frame")

apply(
    apply(df1, 1, function(x) {n <- names(df1); paste0(paste(n,x, sep = ":"))}),
    2,
    paste0, collapse = ","
)

# "name:tom,age:21,cool:yes" "name:mary,age:42,cool:no"
0 голосов
/ 09 ноября 2018

У меня есть некоторые образцы данных, такие как:

name=c("ali","asgar","ahmad","aslam","alvi")
age=c(12,33,23,16,34)
mydf=data.frame(name,age)

Фрейм данных выглядит как

> mydf
   name age
1   ali  12
2 asgar  33
3 ahmad  23
4 aslam  16
5  alvi  34

Теперь создайте объект списка и заполните его.

mylist=list()
for(i in 1:nrow(mydf))
{
  a=as.integer(mydf$age[i])
  n=as.String(mydf$name[i])
  mylist[i]=paste(paste(paste("name",n,sep = ":"),"age",sep = ","),a,sep = ":")
}

Финал, результат

> mylist
[[1]]
[1] "name:ali,age:12"

[[2]]
[1] "name:asgar,age:33"

[[3]]
[1] "name:ahmad,age:23"

[[4]]
[1] "name:aslam,age:16"

[[5]]
[1] "name:alvi,age:34"
0 голосов
/ 09 ноября 2018

Попробуйте с этой комбинацией paste:

df$new.col <- paste(paste(colnames(df)[1], df$name, sep = ":"),
                    paste(colnames(df)[2], df$age, sep = ":"),
                    sep = ",")
# output
#  name age          new.col
#1  tom  21  name:tom,age:21
#2 mary  42 name:mary,age:42
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...