将列表数据重新格式化为特定的数据帧格式

时间:2021-07-01 11:43:50

标签: r

我必须以精确的格式指定一些参数,才能在函数中工作。很难解释,但这里有一些我需要的那种格式的示例数据。

dftargets=list(
  age=list("age1824"=0.1, "age2534"=0.25, "age3544"=0.3, "age4554"=0.25, "age55+"=0.1), 
  sex=list('Male'=0.49, 'Female'=0.51))

> dftargets
$age
$age$age1824
[1] 0.1

$age$age2534
[1] 0.25

$age$age3544
[1] 0.3

$age$age4554
[1] 0.25

$age$`age55+`
[1] 0.1


$sex
$sex$Male
[1] 0.49

$sex$Female
[1] 0.51

我的数据采用这种格式作为单独的列表。

age_label <- c("age1824", "age2534", "age3544", "age4554", "age55+")
age_values <- c(0.1, 0.25, 0.3, 0.25, 0.1)
sex_label <- c("Male", "Female")
sex_values <- c(0.49, 0.51)

有没有办法将我的数据从单独的列表强制转换为上述数据帧格式?我知道我可以输入它,但想知道是否有更简单的方法。非常感谢任何帮助。非常感谢

4 个答案:

答案 0 :(得分:4)

可能有更好的方法,但以下方法可行:

age <- as.list(age_values)
names(age)<-age_label

sex <- as.list(sex_values)
names(sex) <- sex_label

dftargets=list(age=age,sex=sex)
names(dftargets)<-c("age","sex")

答案 1 :(得分:2)

这是一个单行:

age_label <- c("age1824", "age2534", "age3544", "age4554", "age55+")
age_values <- c(0.1, 0.25, 0.3, 0.25, 0.1)
sex_label <- c("Male", "Female")
sex_values <- c(0.49, 0.51)

dftargets <- list(age = as.list(setNames(age_values,age_label)), 
                  sex = as.list(setNames(sex_values,sex_label)))
dftargets
#> $age
#> $age$age1824
#> [1] 0.1
#> 
#> $age$age2534
#> [1] 0.25
#> 
#> $age$age3544
#> [1] 0.3
#> 
#> $age$age4554
#> [1] 0.25
#> 
#> $age$`age55+`
#> [1] 0.1
#> 
#> 
#> $sex
#> $sex$Male
#> [1] 0.49
#> 
#> $sex$Female
#> [1] 0.51
Created on 2021-07-01 by the reprex package (v0.3.0)

答案 2 :(得分:2)

如果每个给定的组中有多个 split 可以使用:

list(age = split(age_values, age_label)
   , sex = split(sex_values, sex_label))

答案 3 :(得分:1)

喜欢吗?

age_label <- c("age1824", "age2534", "age3544", "age4554", "age55+")
age_values <- c(0.1, 0.25, 0.3, 0.25, 0.1)
sex_label <- c("Male", "Female")
sex_values <- c(0.49, 0.51)

names(age_values) <- age_label
names(sex_values) <- sex_label

dft <- list()
dft[["age"]] <- age_values
dft[["sex"]] <- sex_values
dft