r - 有条件地替换数据框中的值
问题描述
我有两个数据框,其中包含七个描述性数据列和可变数量的附加分析列(基于代码中的早期步骤)。我想将 的分析列中的一些值替换dataframe1
为dataframe2
基于dataframe1
.
dataframe1
:
structure(list(compare = c(1, 1, 0, 1, 1, 1, 0, 1), ID_TREE = 29338:29345,
ID_PLOT = c(1068L, 1068L, 1068L, 1068L, 1068L, 1068L, 1068L,
1068L), ID_CATEGORY = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L),
ID_WOOD_SPGR_GREENVOL_DRYWT = c(28L, 28L, 28L, 7L, 28L, 28L,
28L, 28L), ID_BARK_SPGR_GREENVOL_DRYWT = c(25L, 25L, 25L,
18L, 25L, 25L, 25L, 25L), ID_BARK_VOL_PCT = c(2L, 2L, 2L,
10L, 2L, 2L, 2L, 2L), VOLCFGRS = c(3.21875, 6.576453125,
12.2406407654729, 0.863593268246, 1.15809306543472, 0.755301358016,
13.6662694477056, 4.549483421824)), row.names = c(NA, -8L
), class = c("data.table", "data.frame"), .internal.selfref = <pointer: (nil)>)
dataframe2
:
structure(list(compare = c(1, 1, 0, 1, 1, 1, 0, 1), ID_TREE = 29338:29345,
ID_PLOT = c(1068L, 1068L, 1068L, 1068L, 1068L, 1068L, 1068L,
1068L), ID_CATEGORY = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L),
ID_WOOD_SPGR_GREENVOL_DRYWT = c(28L, 28L, 28L, 7L, 28L, 28L,
28L, 28L), ID_BARK_SPGR_GREENVOL_DRYWT = c(25L, 25L, 25L,
18L, 25L, 25L, 25L, 25L), ID_BARK_VOL_PCT = c(2L, 2L, 2L,
10L, 2L, 2L, 2L, 2L), VOLCFGRS = c(-2.32258333333333, 5.81718680555556,
12.2406407654729, -32.9676545519935, -27.9506018960536, -38.5047101237694,
13.6662694477056, 1.9138577595677)), row.names = c(NA, -8L
), class = c("data.table", "data.frame"), .internal.selfref = <pointer: (nil)>)
到目前为止,我已经获得了以下代码行来为 1 列工作:
df1[df1$compare==0,8]<- df2[df1$compare==0,8]
但是当我尝试将它抽象为适用于任意数量的列时,我得到一个错误:
df1[df1$compare==0,-(1:7)]<- df2[df1$compare==0,-(1:7)]
我也是这个并且得到了类似的错误:
df1[,-(1:7)]<- ifelse(df1$compare==0, df2[,-(1:7)], df1[,-(1:7)])
这两个数据框将始终具有相同的列数。
解决方案
最简单的是,您可以“反转”您的子集:
df1[df1$compare==0,8:ncol(df1)] <- df2[df1$compare==0,8:ncol(df1)]
另一种选择是将不rbind
相交的行放在一起。
rbind(df1[df1$compare!=0], df2[df1$compare==0])
推荐阅读
- javascript - Webpack-dev-server 不重新加载 .html
- ios - 在 UITableView 的节页脚中添加一个按钮和文本
- javascript - 我的按钮影响具有不同 id 的两个跨度
- python - 双向广度优先搜索错误
- php - 在mysql类型时间中插入输入时间内容
- php - 在 Larvael 中使用队列发送邮件
- javascript - 在 Bootstrap 4 中折叠卡片表行时更改字体真棒图标
- go - Plan 9 中的“临时”文件模式是什么,它在 Linux 中可用吗?
- http - 必应 API HTTP 请求超时
- reactjs - 反应“未捕获的类型错误:无法读取未定义的属性”