Mic*_*tor 5 r function list dataframe
我有一个12个数据框的列表。列表的名称为kvish_1_10t.tables。每个数据帧都有一列“ day_mean”(在所有数据帧中始终为7列)。说所有数据帧看起来都完全一样是很重要的。这是其中一个表的示例:
X2014_kvish_1_10t
kvish keta maslul yom nefah date day_mean
1 1 10 1 1 1936 2014-09-07 00:00:00 2910.958
2 1 10 1 1 966 2014-09-07 01:00:00 2910.958
3 1 10 1 1 737 2014-09-07 02:00:00 2910.958
4 1 10 1 1 596 2014-09-07 03:00:00 2910.958
5 1 10 1 1 479 2014-09-07 04:00:00 2910.958
6 1 10 1 1 765 2014-09-07 05:00:00 2910.958
7 1 10 1 1 2082 2014-09-07 06:00:00 2910.958
8 1 10 1 1 3624 2014-09-07 07:00:00 2910.958
9 1 10 1 1 3847 2014-09-07 08:00:00 2910.958
10 1 10 1 1 2960 2014-09-07 09:00:00 2910.958
11 1 10 1 1 2871 2014-09-07 10:00:00 2910.958
12 1 10 1 1 3149 2014-09-07 11:00:00 2910.958
13 1 10 1 1 3615 2014-09-07 12:00:00 2910.958
14 1 10 1 1 3943 2014-09-07 13:00:00 2910.958
15 1 10 1 1 4079 2014-09-07 14:00:00 2910.958
16 1 10 1 1 4856 2014-09-07 15:00:00 2910.958
17 1 10 1 1 5010 2014-09-07 16:00:00 2910.958
18 1 10 1 1 4783 2014-09-07 17:00:00 2910.958
19 1 10 1 1 4684 2014-09-07 18:00:00 2910.958
20 1 10 1 1 4478 2014-09-07 19:00:00 2910.958
21 1 10 1 1 3610 2014-09-07 20:00:00 2910.958
22 1 10 1 1 2799 2014-09-07 21:00:00 2910.958
23 1 10 1 1 2346 2014-09-07 22:00:00 2910.958
24 1 10 1 1 1648 2014-09-07 23:00:00 2910.958
25 1 10 1 2 1145 2014-09-08 00:00:00 2745.917
26 1 10 1 2 671 2014-09-08 01:00:00 2745.917
...
168 rows totalRun Code Online (Sandbox Code Playgroud)
现在,我改变了“day_mean”列(7在右列),以便在1,25,49,73,97,121,145的位置的值 SEQ(1,168,24)处仍将作为他们是,其余的将成为NA的。因此,我编写了此代码以定义一个数字向量,这些数字表示“ day_mean”列中将获得NA值的位置:
aa = seq(1, 168 , 24)
bb = rep(T, 168)
bb[aa] = F
cc= (which(bb))
X2014_kvish_1_10t[,7][cc] = NA
Run Code Online (Sandbox Code Playgroud)
现在,如您所见,我更改了“ day_mean”列,因此只有相关值将保持原样,其余将变为NA。像这儿:
aa = seq(1, 168 , 24)
bb = rep(T, 168)
bb[aa] = F
cc= (which(bb))
X2014_kvish_1_10t[,7][cc] = NA
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切进展顺利,但是当我尝试对列表中的所有数据框执行相同的操作时,它就失败了。我尝试编写以下命令,但效果不佳,我创建了一个函数,每个数据帧中的所有7列都将获得新值:
func = function(x) (x[,7][cc] = NA)
lapply(kvish_1_10t.tables, func)
Run Code Online (Sandbox Code Playgroud)
如何更改每个数据框中的所有day_mean列?
我希望有人会使用 lapply 发布答案,但鉴于没有发布答案,而且我更擅长 for 循环,我想我至少会发布这个,希望它能解决您眼前的问题:
d1<-data.frame(y1<-c(1,2,3),y2<-c(4,5,6))
d2 <- data.frame(y1=c(3,2,1),y2=c(6,5,4))
myl <- list(d1, d2)
cc <- c(1,3)
for (n in 1:length(myl)){
myl[[n]][cc,2] <- NA
print(myl[[n]][cc,2])
}
Run Code Online (Sandbox Code Playgroud)
因此,对于您的具体示例,我认为这应该可行(假设 kvish_1_10t.tables 确实是一个列表 - 如果您不确定,请使用 str(kvish_1_10t.tables) 查看结构:
for (n in 1:length(kvish_1_10t.tables)){
kvish_1_10t.tables[[n]][cc,"day_mean"] <- NA
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1225 次 |
| 最近记录: |