楼主: zzusing、
2395 5

[问答] 用R语言想要循环提取数据,提取的结果总是最后一行 [推广有奖]

  • 0关注
  • 0粉丝

初中生

9%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
119 点
帖子
6
精华
0
在线时间
11 小时
注册时间
2021-3-18
最后登录
2021-5-13

楼主
zzusing、 发表于 2021-3-18 11:46:19 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

数据如下


table<- data.frame()


  for(x in 0:31){


  c<- b[(15*x+1):(15*x+15),]


  d<- subset(c,c$Used == TRUE,)


  e<- d[which.min(d$Calculated.Concentration),]


  LLOD<-e$Calculated.Concentration


  f<- d$Calculated.Concentration


  g<- as.numeric(f)


  LLOQ<- min(g[g!=min(g)])   #去掉最小的那个数


  h<- d[which.max(d$Actual.Concentration),]


  ULOQ<-h$Actual.Concentration


  i<- d$Correlation.Coefficient


  R2<- max(i)


  j<- d$Component.Name


  Name<- j[1]


  table[[x]]<- data.frame(Name,LLOD,LLOQ,ULOQ,R2)}



我想每隔15行,按照要求分别提取Name,LLOD,LLOQ,R2这4个数,代码是之前问的结果,每次都报错,希望改进后可以保存每次的结果


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:R语言 Table ABLE ABL tab R语言 R语言强化版 R语言商业软件 R语言编程

沙发
owenqi 在职认证  学生认证  发表于 2021-3-18 12:29:26
缺少b这个数据框,所以你的例子没办法复现,但是根据你的描述,你是打算每隔15行提取某些数据,一个比较可行的方法是,你正常跑完整个循环,然后计算出要提取出的行号,这样针对该行号提取相应的数据就可以了。
  1. x <- 1:100
  2. idx <- x %% 15 == 0
  3. x[idx]
复制代码

藤椅
zzusing、 发表于 2021-3-18 15:31:33
owenqi 发表于 2021-3-18 12:29
缺少b这个数据框,所以你的例子没办法复现,但是根据你的描述,你是打算每隔15行提取某些数据,一个比较可 ...
下面是总的代码,期待您的回复

setwd("F:/R/")  #文件位置
getwd()
library(xlsx)
a<- read.xlsx("F:/R/练习/20210111-trp-5-projects.xlsx",1) #文件位置
a<- a[order(a$Component.Name,decreasing = FALSE),]
a<- subset(a,a$Sample.Type =="Standard")
View(a)
b<- subset(a,a$Correlation.Coefficient != "N/A" )
View(b)
n<- nrow(b)/15-1
table<- list()
  for(x in 0:1){
  c<-b[(15*x+1):(15*x+15),]
  d<- subset(c,c$Used == TRUE,)
  e<- d[which.min(d$Calculated.Concentration),]
  LLOD<-e$Calculated.Concentration
  f<- d$Calculated.Concentration
  g<- as.numeric(f)          #让f的数变成数值型
  LLOQ<- min(g[g!=min(g)])   #去掉最小的那个数
  h<- d[which.max(d$Actual.Concentration),]
  ULOQ<-h$Actual.Concentration
  i<- d$Correlation.Coefficient
  R2<- max(i)
  j<- d$Component.Name
  Name<- j[1]
write.csv(data.frame(Name,LLOD,LLOQ,ULOQ,R2))
}

板凳
owenqi 在职认证  学生认证  发表于 2021-3-19 01:59:43
老样子,没有数据,没办法复现,你如果因为保密原因,可以提供一些人造数据。我理解的有几点,你拿table作为变量名可能不一定合适,因为table本身是函数的名字。还有就是你原来的table[[x]]可能可以用table[x,] <- c(Name,LLOD,LLOQ,ULOQ,R2)

报纸
owenqi 在职认证  学生认证  发表于 2021-3-19 02:30:49
另外,通常如果数据多的话,不建议使用循环,个人还是比较喜欢向量化的操作。写一个简单的例子给你。
  1. df <- data.frame(id = 1:(15 * 5), val = runif(15* 5))
  2. dlist <- split(df, 0: (nrow(df) - 1) %/% 15)

  3. f <- function(dlst){
  4.   d_min <- min(dlst$val)
  5.   d_avg <- mean(dlst$val)
  6.   d_max <- max(dlst$val)
  7.   return(c(min = d_min, avg = d_avg, max = d_max))
  8. }

  9. dl <- lapply(dlist, f)
  10. dl <- dplyr::bind_rows(dl)
复制代码

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Sunknownay + 3 + 3 + 3 热心帮助其他会员

总评分: 学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

地板
zzusing、 发表于 2021-3-22 17:23:37
owenqi 发表于 2021-3-19 02:30
另外,通常如果数据多的话,不建议使用循环,个人还是比较喜欢向量化的操作。写一个简单的例子给你。
谢谢,谢谢,已经处理好!

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-3 12:52