在R中的不同数据帧之间替换值
我有以下4个数据帧的代码。每个的最后一列只有两个值,零(“0”)或一个id,这在每个在R中的不同数据帧之间替换值,r,dataframe,replace,substitution,R,Dataframe,Replace,Substitution,我有以下4个数据帧的代码。每个的最后一列只有两个值,零(“0”)或一个id,这在每个df中是相同的,但在每个df之间是不同的 如何用id列中的所有零替换所有相同的id 例如,将df1更改为: year counts id 1 2015 0 0 2 2016 0 0 3 2017 7 Fg4s5 4 2018 8 Fg4s5 5 2019 5
df
中是相同的,但在每个df
之间是不同的
如何用id
列中的所有零替换所有相同的id
例如,将df1更改为:
year counts id
1 2015 0 0
2 2016 0 0
3 2017 7 Fg4s5
4 2018 8 Fg4s5
5 2019 5 0
6 2020 12 Fg4s5
致:
其他df
s及其ID也一样
数据帧代码:
df1 <- data.frame(
year = c(2015:2020),
counts = c(0, 0, 7, 8, 5, 12),
id = c(0, 0, "Fg4s5", "Fg4s5", 0, "Fg4s5")
)
df2 <- data.frame(
year = c(2014:2020),
counts = c(1, 5, 9, 2, 2, 19, 3),
id = c(0, 0, 0, 0, 0, "Qd8a2", "Qd8a2")
)
df3 <- data.frame(
year = c(2016:2020),
counts = c(0, 0, 0, 0, 6),
id = c(0, 0, "Wk9l4", "Wk9l4", "Wk9l4")
)
df4 <- data.frame(
year = c(2014:2020),
counts = c(0, 0, 8, 1, 9, 12, 23),
id = c(0, "Rd7q0", 0, 0, "Rd7q0", "Rd7q0", "Rd7q0")
)
df1将数据帧放入列表中,并使用lappy
更改id
列中的值:
list_df <- list(df1, df2, df3, df4)
lapply(list_df, function(x) {
transform(x, id = replace(id, id == 0, id[id != '0'][1]))
}) -> list_df
list_df
#[[1]]
# year counts id
#1 2015 0 Fg4s5
#2 2016 0 Fg4s5
#3 2017 7 Fg4s5
#4 2018 8 Fg4s5
#5 2019 5 Fg4s5
#6 2020 12 Fg4s5
#[[2]]
# year counts id
#1 2014 1 Qd8a2
#2 2015 5 Qd8a2
#3 2016 9 Qd8a2
#4 2017 2 Qd8a2
#5 2018 2 Qd8a2
#6 2019 19 Qd8a2
#7 2020 3 Qd8a2
#[[3]]
# year counts id
#1 2016 0 Wk9l4
#2 2017 0 Wk9l4
#3 2018 0 Wk9l4
#4 2019 0 Wk9l4
#5 2020 6 Wk9l4
#[[4]]
# year counts id
#1 2014 0 Rd7q0
#2 2015 0 Rd7q0
#3 2016 8 Rd7q0
#4 2017 1 Rd7q0
#5 2018 9 Rd7q0
#6 2019 12 Rd7q0
#7 2020 23 Rd7q0
list\u df list\u df
列表
#[[1]]
#年份计数id
#1 2015 0 Fg4s5
#2 2016 0 Fg4s5
#2017年3月7日Fg4s5
#2018年4月8日Fg4s5
#5 2019 5 Fg4s5
#6 2020 12 Fg4s5
#[[2]]
#年份计数id
#2014年1月1日Qd8a2
#2 2015 5 Qd8a2
#2016年3月9日Qd8a2
#2017年4月2日Qd8a2
#2018年5月2日Qd8a2
#2019年6月19日Qd8a2
#7 2020 3 Qd8a2
#[[3]]
#年份计数id
#1 2016 0 Wk9l4
#2017年2月0日Wk9l4
#2018年3月0日Wk9l4
#4 20190 Wk9l4
#5 2020 6 Wk9l4
#[[4]]
#年份计数id
#1 2014 0 Rd7q0
#2 2015 0 Rd7q0
#2016年3月8日Rd7q0
#2017年4月1日Rd7q0
#2018年5月9日Rd7q0
#2019年6月12日Rd7q0
#7 2020 23 Rd7q0
将它们放在单独的数据帧中
names(list_df) <- paste0('df', 1:4)
list2env(list_df, .GlobalEnv)
names(list_df)将数据帧放入列表中,并使用lappy
更改id
列中的值:
list_df <- list(df1, df2, df3, df4)
lapply(list_df, function(x) {
transform(x, id = replace(id, id == 0, id[id != '0'][1]))
}) -> list_df
list_df
#[[1]]
# year counts id
#1 2015 0 Fg4s5
#2 2016 0 Fg4s5
#3 2017 7 Fg4s5
#4 2018 8 Fg4s5
#5 2019 5 Fg4s5
#6 2020 12 Fg4s5
#[[2]]
# year counts id
#1 2014 1 Qd8a2
#2 2015 5 Qd8a2
#3 2016 9 Qd8a2
#4 2017 2 Qd8a2
#5 2018 2 Qd8a2
#6 2019 19 Qd8a2
#7 2020 3 Qd8a2
#[[3]]
# year counts id
#1 2016 0 Wk9l4
#2 2017 0 Wk9l4
#3 2018 0 Wk9l4
#4 2019 0 Wk9l4
#5 2020 6 Wk9l4
#[[4]]
# year counts id
#1 2014 0 Rd7q0
#2 2015 0 Rd7q0
#3 2016 8 Rd7q0
#4 2017 1 Rd7q0
#5 2018 9 Rd7q0
#6 2019 12 Rd7q0
#7 2020 23 Rd7q0
list\u df list\u df
列表
#[[1]]
#年份计数id
#1 2015 0 Fg4s5
#2 2016 0 Fg4s5
#2017年3月7日Fg4s5
#2018年4月8日Fg4s5
#5 2019 5 Fg4s5
#6 2020 12 Fg4s5
#[[2]]
#年份计数id
#2014年1月1日Qd8a2
#2 2015 5 Qd8a2
#2016年3月9日Qd8a2
#2017年4月2日Qd8a2
#2018年5月2日Qd8a2
#2019年6月19日Qd8a2
#7 2020 3 Qd8a2
#[[3]]
#年份计数id
#1 2016 0 Wk9l4
#2017年2月0日Wk9l4
#2018年3月0日Wk9l4
#4 20190 Wk9l4
#5 2020 6 Wk9l4
#[[4]]
#年份计数id
#1 2014 0 Rd7q0
#2 2015 0 Rd7q0
#2016年3月8日Rd7q0
#2017年4月1日Rd7q0
#2018年5月9日Rd7q0
#2019年6月12日Rd7q0
#7 2020 23 Rd7q0
将它们放在单独的数据帧中
names(list_df) <- paste0('df', 1:4)
list2env(list_df, .GlobalEnv)
使用purrr::map
map(list(df1, df2, df3, df4), ~ .x %>% mutate(id = first(id[id != "0"])))
[[1]]
year counts id
1 2015 0 Fg4s5
2 2016 0 Fg4s5
3 2017 7 Fg4s5
4 2018 8 Fg4s5
5 2019 5 Fg4s5
6 2020 12 Fg4s5
[[2]]
year counts id
1 2014 1 Qd8a2
2 2015 5 Qd8a2
3 2016 9 Qd8a2
4 2017 2 Qd8a2
5 2018 2 Qd8a2
6 2019 19 Qd8a2
7 2020 3 Qd8a2
[[3]]
year counts id
1 2016 0 Wk9l4
2 2017 0 Wk9l4
3 2018 0 Wk9l4
4 2019 0 Wk9l4
5 2020 6 Wk9l4
[[4]]
year counts id
1 2014 0 Rd7q0
2 2015 0 Rd7q0
3 2016 8 Rd7q0
4 2017 1 Rd7q0
5 2018 9 Rd7q0
6 2019 12 Rd7q0
7 2020 23 Rd7q0
使用purrr::map
map(list(df1, df2, df3, df4), ~ .x %>% mutate(id = first(id[id != "0"])))
[[1]]
year counts id
1 2015 0 Fg4s5
2 2016 0 Fg4s5
3 2017 7 Fg4s5
4 2018 8 Fg4s5
5 2019 5 Fg4s5
6 2020 12 Fg4s5
[[2]]
year counts id
1 2014 1 Qd8a2
2 2015 5 Qd8a2
3 2016 9 Qd8a2
4 2017 2 Qd8a2
5 2018 2 Qd8a2
6 2019 19 Qd8a2
7 2020 3 Qd8a2
[[3]]
year counts id
1 2016 0 Wk9l4
2 2017 0 Wk9l4
3 2018 0 Wk9l4
4 2019 0 Wk9l4
5 2020 6 Wk9l4
[[4]]
year counts id
1 2014 0 Rd7q0
2 2015 0 Rd7q0
3 2016 8 Rd7q0
4 2017 1 Rd7q0
5 2018 9 Rd7q0
6 2019 12 Rd7q0
7 2020 23 Rd7q0
很好,谢谢!我如何应用这些更改,使df1-df4仍然是单独的df1-df4?更新了答案。哇,太棒了。节省了我这么多时间!谢谢,很好,谢谢!我如何应用这些更改,使df1-df4仍然是单独的df1-df4?更新了答案。哇,太棒了。节省了我这么多时间!谢谢。很好的解决方案!格雷西亚斯,很好的解决方案!格雷西亚斯。