如何在列表中插入占位符,其中使用 R 缺少数据?
How to insert a place holder in a list, where pieces of data are missing using R?
我有一组实验数据需要分析。但由于其中还有很多对我来说不重要的数据,我想使用 R 稍微整理一下这些文件,因为手动完成的工作太多了。
由于这些 .csv 文件中的数据不在时间过程实验中,因此不同测量的顺序很重要,不同的数字必须按特定顺序排列。
到目前为止,我已经设法 select 我需要的所有列,并使用以下代码按不同条件对它们进行排序:
used_columns <- select(df,
ImageNumber,
FrameNumber,
Treatment,
Intensity1,
Intensity2)
used_columns.t <- as.tibble(used_columns)
df_sorted <- used_columns.t %>%
filter(Treatment == "B2") %>%
.[order(as.integer(.$FrameNumber),decreasing = FALSE), ]
使用此代码,df_sorted 生成如下所示的数据框:
ImageNumber FrameNumber Treatment Intensity1 Intensity2
1 1 B2 1598,45 0,14
2 1 B2 930,40 0,11
3 1 B2 107,86 0,04
4 1 B2 881,09 0,11
7 1 B2 2201,98 0,15
8 1 B2 161,30 0,04
9 1 B2 1208,14 0,17
4 2 B2 831,75 0,12
5 2 B2 1027,41 0,14
7 2 B2 2052,16 0,15
8 2 B2 159,63 0,05
9 2 B2 1111,49 0,16
10 2 B2 1312,15 0,12
1 3 B2 863,79 0,10
2 3 B2 104,06 0,04
3 3 B2 816,02 0,11
4 3 B2 1053,02 0,14
5 3 B2 132,32 0,03
6 3 B2 2059,03 0,14
7 3 B2 153,49 0,04
8 3 B2 1118,69 0,15
9 3 B2 1632,66 0,18
10 3 B2 1302,15 0,12
但是,我想要这样的 table,其中缺失值表示为 NA(或任何其他占位符):
ImageNumber FrameNumber Treatment Intensity1 Intensity2
1 1 B2 1598,45 0,14
2 1 B2 930,40 0,11
3 1 B2 107,86 0,04
4 1 B2 881,09 0,11
5 NA NA NA NA
6 NA NA NA NA
7 1 B2 2201,98 0,15
8 1 B2 161,30 0,04
9 1 B2 1208,14 0,17
10 NA NA NA NA
1 NA NA NA NA
2 NA NA NA NA
3 NA NA NA NA
4 2 B2 831,75 0,12
5 2 B2 1027,41 0,14
6 NA NA NA NA
7 2 B2 2052,16 0,15
8 2 B2 159,63 0,05
9 2 B2 1111,49 0,16
10 2 B2 1312,15 0,12
1 3 B2 863,79 0,10
2 3 B2 104,06 0,04
3 3 B2 816,02 0,11
4 3 B2 1053,02 0,14
5 3 B2 132,32 0,03
6 3 B2 2059,03 0,14
7 3 B2 153,49 0,04
8 3 B2 1118,69 0,15
9 3 B2 1632,66 0,18
10 3 B2 1302,15 0,12
这只是我所拥有的 table 的一个非常简短的摘录,实际上,根据情况,ImageNumber 可能会上升到 1441。你知道任何可能性吗,我该如何解决这个问题有问题吗?
如果有人能在此帮助我,我将不胜感激!
这是 base R
中的拆分-应用-组合方法
out <- do.call(rbind,
by(
data = df1,
INDICES = df1$FrameNumber,
FUN = merge,
y = data.frame(ImageNumber = seq(min(df1$ImageNumber), max(df1$ImageNumber))),
all.y = TRUE
))
out
# ImageNumber FrameNumber Treatment Intensity1 Intensity2
#1.1 1 1 B2 1598,45 0,14
#1.2 2 1 B2 930,40 0,11
#1.3 3 1 B2 107,86 0,04
#1.4 4 1 B2 881,09 0,11
#1.5 5 NA <NA> <NA> <NA>
#1.6 6 NA <NA> <NA> <NA>
#1.7 7 1 B2 2201,98 0,15
#1.8 8 1 B2 161,30 0,04
#1.9 9 1 B2 1208,14 0,17
#1.10 10 NA <NA> <NA> <NA>
#2.1 1 NA <NA> <NA> <NA>
#2.2 2 NA <NA> <NA> <NA>
#2.3 3 NA <NA> <NA> <NA>
#2.4 4 2 B2 831,75 0,12
# ...
我们按 FrameNumber
拆分您的数据,将每个列表元素与包含名为 ImageNumber
的单个列的数据框合并。该列包含从 min(df1$ImageNumber)
到 max(df1$ImageNumber)
的值 - 在您的示例中是从 1
到 10
。参数 all.y = TRUE
- 属于 merge
- 将隐式缺失值转换为显式缺失值。
最后我们用 do.call(rbind, ...)
.
将列表组合回一个数据框
我有一组实验数据需要分析。但由于其中还有很多对我来说不重要的数据,我想使用 R 稍微整理一下这些文件,因为手动完成的工作太多了。 由于这些 .csv 文件中的数据不在时间过程实验中,因此不同测量的顺序很重要,不同的数字必须按特定顺序排列。
到目前为止,我已经设法 select 我需要的所有列,并使用以下代码按不同条件对它们进行排序:
used_columns <- select(df,
ImageNumber,
FrameNumber,
Treatment,
Intensity1,
Intensity2)
used_columns.t <- as.tibble(used_columns)
df_sorted <- used_columns.t %>%
filter(Treatment == "B2") %>%
.[order(as.integer(.$FrameNumber),decreasing = FALSE), ]
使用此代码,df_sorted 生成如下所示的数据框:
ImageNumber FrameNumber Treatment Intensity1 Intensity2
1 1 B2 1598,45 0,14
2 1 B2 930,40 0,11
3 1 B2 107,86 0,04
4 1 B2 881,09 0,11
7 1 B2 2201,98 0,15
8 1 B2 161,30 0,04
9 1 B2 1208,14 0,17
4 2 B2 831,75 0,12
5 2 B2 1027,41 0,14
7 2 B2 2052,16 0,15
8 2 B2 159,63 0,05
9 2 B2 1111,49 0,16
10 2 B2 1312,15 0,12
1 3 B2 863,79 0,10
2 3 B2 104,06 0,04
3 3 B2 816,02 0,11
4 3 B2 1053,02 0,14
5 3 B2 132,32 0,03
6 3 B2 2059,03 0,14
7 3 B2 153,49 0,04
8 3 B2 1118,69 0,15
9 3 B2 1632,66 0,18
10 3 B2 1302,15 0,12
但是,我想要这样的 table,其中缺失值表示为 NA(或任何其他占位符):
ImageNumber FrameNumber Treatment Intensity1 Intensity2
1 1 B2 1598,45 0,14
2 1 B2 930,40 0,11
3 1 B2 107,86 0,04
4 1 B2 881,09 0,11
5 NA NA NA NA
6 NA NA NA NA
7 1 B2 2201,98 0,15
8 1 B2 161,30 0,04
9 1 B2 1208,14 0,17
10 NA NA NA NA
1 NA NA NA NA
2 NA NA NA NA
3 NA NA NA NA
4 2 B2 831,75 0,12
5 2 B2 1027,41 0,14
6 NA NA NA NA
7 2 B2 2052,16 0,15
8 2 B2 159,63 0,05
9 2 B2 1111,49 0,16
10 2 B2 1312,15 0,12
1 3 B2 863,79 0,10
2 3 B2 104,06 0,04
3 3 B2 816,02 0,11
4 3 B2 1053,02 0,14
5 3 B2 132,32 0,03
6 3 B2 2059,03 0,14
7 3 B2 153,49 0,04
8 3 B2 1118,69 0,15
9 3 B2 1632,66 0,18
10 3 B2 1302,15 0,12
这只是我所拥有的 table 的一个非常简短的摘录,实际上,根据情况,ImageNumber 可能会上升到 1441。你知道任何可能性吗,我该如何解决这个问题有问题吗?
如果有人能在此帮助我,我将不胜感激!
这是 base R
out <- do.call(rbind,
by(
data = df1,
INDICES = df1$FrameNumber,
FUN = merge,
y = data.frame(ImageNumber = seq(min(df1$ImageNumber), max(df1$ImageNumber))),
all.y = TRUE
))
out
# ImageNumber FrameNumber Treatment Intensity1 Intensity2
#1.1 1 1 B2 1598,45 0,14
#1.2 2 1 B2 930,40 0,11
#1.3 3 1 B2 107,86 0,04
#1.4 4 1 B2 881,09 0,11
#1.5 5 NA <NA> <NA> <NA>
#1.6 6 NA <NA> <NA> <NA>
#1.7 7 1 B2 2201,98 0,15
#1.8 8 1 B2 161,30 0,04
#1.9 9 1 B2 1208,14 0,17
#1.10 10 NA <NA> <NA> <NA>
#2.1 1 NA <NA> <NA> <NA>
#2.2 2 NA <NA> <NA> <NA>
#2.3 3 NA <NA> <NA> <NA>
#2.4 4 2 B2 831,75 0,12
# ...
我们按 FrameNumber
拆分您的数据,将每个列表元素与包含名为 ImageNumber
的单个列的数据框合并。该列包含从 min(df1$ImageNumber)
到 max(df1$ImageNumber)
的值 - 在您的示例中是从 1
到 10
。参数 all.y = TRUE
- 属于 merge
- 将隐式缺失值转换为显式缺失值。
最后我们用 do.call(rbind, ...)
.