如何在R中的for循环中使用gather()
我有一个72列的大数据集,我想把每3列收集到一个新的列中,最后得到24列 我试着使用如何在R中的for循环中使用gather(),r,multiple-columns,tidyr,R,Multiple Columns,Tidyr,我有一个72列的大数据集,我想把每3列收集到一个新的列中,最后得到24列 我试着使用gather()函数,但它只在t=时工作一次,也就是说,它一次只收集3列 我可以在for循环中使用此函数吗 我试过这个: j=0 k=1 l=2 for (i in 2:24){ neww <- gather(columns, "KEy", "Proteins H/L", c((i+j), (i+k), (i+l)), na.rm = TRUE) j=j+2; k=k+2; l=l+2; }
gather()
函数,但它只在t=时工作一次,也就是说,它一次只收集3列
我可以在for循环中使用此函数吗
我试过这个:
j=0
k=1
l=2
for (i in 2:24){
neww <- gather(columns, "KEy", "Proteins H/L", c((i+j), (i+k), (i+l)), na.rm = TRUE)
j=j+2;
k=k+2;
l=l+2;
}
j=0
k=1
l=2
(我在2:24){
新的为此,您可以使用来自的to_long
函数。此函数是一个方便的for循环,它调用多个聚集()
调用
# create sample
mydat <- data.frame(age = c(20, 30, 40),
sex = c("Female", "Male", "Male"),
score_t1 = c(30, 35, 32),
score_t2 = c(33, 34, 37),
score_t3 = c(36, 35, 38),
speed_t1 = c(2, 3, 1),
speed_t2 = c(3, 4, 5),
speed_t3 = c(1, 8, 6))
# check tidyr. score is gathered, however, speed is not
tidyr::gather(mydat, "time", "score", score_t1, score_t2, score_t3)
> age sex speed_t1 speed_t2 speed_t3 time score
> 1 20 Female 2 3 1 score_t1 30
> 2 30 Male 3 4 8 score_t1 35
> 3 40 Male 1 5 6 score_t1 32
> 4 20 Female 2 3 1 score_t2 33
> 5 30 Male 3 4 8 score_t2 34
> 6 40 Male 1 5 6 score_t2 37
> 7 20 Female 2 3 1 score_t3 36
> 8 30 Male 3 4 8 score_t3 35
> 9 40 Male 1 5 6 score_t3 38
# gather multiple columns. both time and speed are gathered.
to_long(mydat, "time", c("score", "speed"),
c("score_t1", "score_t2", "score_t3"),
c("speed_t1", "speed_t2", "speed_t3"))
> age sex time score speed
> (dbl) (fctr) (chr) (dbl) (dbl)
> 1 20 Female score_t1 30 2
> 2 30 Male score_t1 35 3
> 3 40 Male score_t1 32 1
> 4 20 Female score_t2 33 3
> 5 30 Male score_t2 34 4
> 6 40 Male score_t2 37 5
> 7 20 Female score_t3 36 1
> 8 30 Male score_t3 35 8
> 9 40 Male score_t3 38 6
有关更多示例,请参见?to_long
我不确定,但我想我在GitHub上读到了一些关于tidyr somewhen也计划进行“多列收集”的信息。请给出一个可复制的示例。gather()
函数不是base R的一部分。它来自哪个软件包?是添加列以生成3倍长的data.frame,还是将列粘贴在一起?如果没有更多信息,将很难为您提供帮助。如果您使用SE版本的聚集
,您可以迭代列名,并将其作为s传递使用tidyr收集多组列您是否检查了此项?它是否解决了类似的问题?可能重复?Gather()来自包tidyr.soryy,因为之前没有提到是的,我已经检查过了:stackoverflow.com/q/25925556/5249203,但在我的例子中,列没有类似的名称,所有名称都是从同一个字符串开始的,所以我必须使用列号
to_long(mydat, "time", c("score", "speed"),
c("score_t1", "score_t2", "score_t3"),
c("speed_t1", "speed_t2", "speed_t3"),
recode.key = TRUE)
> age sex time score speed
> (dbl) (fctr) (dbl) (dbl) (dbl)
> 1 20 Female 1 30 2
> 2 30 Male 1 35 3
> 3 40 Male 1 32 1
> 4 20 Female 2 33 3
> 5 30 Male 2 34 4
> 6 40 Male 2 37 5
> 7 20 Female 3 36 1
> 8 30 Male 3 35 8
> 9 40 Male 3 38 6