R语言rlist包的使用

基本用法

#此例子来自上述文章
#创建一个 rlist
devs <- 
  list(
    p1=list(name="Ken",age=24,
      interest=c("reading","music","movies"),
      lang=list(r=2,csharp=4,python=3)),
    p2=list(name="James",age=25,
      interest=c("sports","music"),
      lang=list(r=3,java=2,cpp=5)),
    p3=list(name="Penny",age=24,
      interest=c("movies","reading"),
      lang=list(r=1,cpp=4,python=2)))

#查看rlist,用str比较简洁
str(devs)

#映射 
list.map(devs,age)
list.map(devs, names(lang))
list.map(devs, mean(as.numeric(lang)))

#筛选
list.filter(dev,age>25)

与 data.table 的结合

#读入测试数据
test = read.csv("test.csv",stringsAsFactors = FALSE,header = T)

在这里插入图片描述
为什么要使用 rlist 和 data.table 结合

  • 在这类型的数据中,ID,Sex, Age 之间是相对联系没那么紧密的,但是存在一些 Vars, Var1 和 Var2 和 Var3 之间是有关联的,每一个 Var1, Var2, Var3, 又分为 A, B两个部分。例如,Var123分别代表三餐的血糖,但每一餐的血糖测了餐前后餐后两个值(即A 和 B),在计算血糖波动的时候,通常要每一餐的餐后减去餐前,再取平均值,在记录天数很多的时候,用 rlist 就能减少工作量。又例如,Vars为一个检测的结果,VarA是检测日期,VarB是检测结果,总共测了1,2,3…N 次,如要分析检测结果的变化情况。
#将 data.frame 转换成 rlist
test_lst = lapply(1:nrow(test),function(i){
    
    
  r = test[i,]
  l = list()
  l$ID = r$ID
  l$Sex = r$Sex
  l$Age = r$Age
  l$Vars <- data.table(c(r$Var1_A,r$Var2_A,r$Var_3A),c(r$Var1_B,r$Var_2B,r$Var_3B))
  colnames(l$Vars) = c("VarA","VarB")
  l
})
  • 转换后部分如图
    在这里插入图片描述
#查看数据
test_lst[[1]]$ID
test_list[[1]]$Vars$VarA
Diff <-
  lapply(test_lst,function(x){
    
    
    dt <- x$Var
    dif = mean(dt$VarB - dt$VarA)
  })

在这里插入图片描述

Reference

R语言︱非结构化数据处理神器——rlist包

猜你喜欢

转载自blog.csdn.net/Alleine/article/details/105189311