使用此df:

  DF = data.frame(m=rep(1:2,2), y=rep(1998:1999,each=2), A=c(2:5), B=c(4,NA,6,7))

> DF
  m    y A  B
1 1 1998 2  4
2 2 1998 3 NA
3 1 1999 4  6
4 2 1999 5  7

如何使用以下值作为坐标替换单个单元格:

m = 2 ; y = 1999 ; col = 'A' ; val = 72

按照这些值,我想用72代替5。


编辑。 测试所有答案后,我意识到我的问题很基础,并不代表我的问题。 我尝试不使用for循环来执行此操作,但失败了,最终使用了它。

因此,我要替换DF数据框中的值,但要使用其他数据框:

repl = data.frame(m=c(2,1), y=c(1999,1998), col=c('A','B'), val=c(72,100))
> repl
  m    y col val
1 2 1999   A  72
2 1 1998   B 100

这意味着repl数据帧的每一行都是要在DF替换的值。

我一直在尝试对每一行使用Psidom回答mutate(A = replace(A, m == 2 & y == 1999, 72) 1999,72 mutate(A = replace(A, m == 2 & y == 1999, 72) ,但是想知道是否可以不使用循环或不使用列名。

谢谢。

#1楼 票数:2

dplyr方式是mutate + if_else

DF %>% mutate(A = if_else(m == 2 & y == 1999, 72L, A))

#  m    y  A  B
#1 1 1998  2  4
#2 2 1998  3 NA
#3 1 1999  4  6
#4 2 1999 72  7

mutate + replace

DF %>% mutate(A = replace(A, m == 2 & y == 1999, 72))

#  m    y  A  B
#1 1 1998  2  4
#2 2 1998  3 NA
#3 1 1999  4  6
#4 2 1999 72  7

根据条件返回返回替换为预期值的新向量。


更新如果需要同时进行许多更新,则可以:

1)调整DF以便将要更新的列聚集在单个列中;

2)在两个条件列my以及列标题列上联接;

3)更新值;

4)重新整形数据框;

因此,与tidyr一起,您可以执行以下操作:

library(dplyr); library(tidyr)

DF %>% 
    gather(col, vals, -m, -y) %>% 
    left_join(repl, by = c("m", "y", "col")) %>% 
    mutate(vals = coalesce(val, vals)) %>% 
    select(-val) %>% 
    spread(col, vals)

#  m    y  A   B
#1 1 1998  2 100
#2 1 1999  4   6
#3 2 1998  3  NA
#4 2 1999 72   7

#2楼 票数:0

base-R中针对您的后续问题的单行方法是

lapply(1:nrow(repl), function(i) 
       DF[DF$m==repl$m[i] & DF$y==repl$y[i], repl$col[i]] <<- repl$val[i])

DF
  m    y  A   B
1 1 1998  2 100
2 2 1998  3  NA
3 1 1999  4   6
4 2 1999 72   7

这遍历了repl每一行,并对DF进行了更改。 <<-强制其在全局环境中对原始DF进行更改。

  ask by noriega translate from so

未解决问题?本站智能推荐:

1回复

将 setdiff 结果存储在数据帧单元格中

这是我的例子: 它产生一个错误: 有什么问题以及如何解决? 有什么想法吗? 更新:我的错,我只是忘了添加mutate
2回复

如何使用 tidyverse 在 r 中的数据帧中重新评估更改的单元格值

我正在尝试使用建筑能耗数据做一些工作。 数据足够大(大约 20 米。线),我正在使用来自 kaggle here的 ashrae 能量预测的 train 和 building_metadata 数据帧 我创建了一个新变量 energy_sqm 并且我发现例如在某个建筑物中我想要纠正的停电。 该代码在
2回复

R / Dplyr从具有逗号分隔单元格值的单元格的数据帧中创建更大的数据帧[重复]

这个问题已经在这里有了答案: 将一列中以逗号分隔的字符串拆分为单独的行 5个答案 我正在处理如下所示的数据框。 我已尽力将其格式化为SO。 重要的是, person , personparty和sponsordate的逗号分隔条目数相同(我已将单元格截断,因此在
1回复

比较R中两个具有不同行数的数据帧,以查找单元格中的差异

因此,我有两个不同年份的数据框。 第二年df在某些单元格中具有其他行以及更新的值。 我的目标是获得一个新的数据框,该数据框仅显示已添加或更改的内容,其他所有内容都可以为0,NA或删除。 看一下df 1(y1): 所以现在过去了一年,我有了这个新的数据集(y2),请注意不同的行和
2回复

优雅的方式在R中单元格添加一堆类似的数据帧?

我有一个类似类型的1000个数据框列表 每个都是80乘4的数据帧。 我想以单元方式添加(或任何其他操作)所有这些数据帧,并将输出作为80乘4的数据帧,每个单元格包含1000个单元格的总和,或者可能是1000个单元格的平均值?
2回复

根据 R 中的另一个数据帧更改单元格

在这种情况下,如果 df1==1 新值中的单元格是当前 df2 单元格,我想用另一个数据框的值创建一个新列 预期的答案是; 非常感谢提前
1回复

将数据帧单元格中的值向量转换为对应行的列值

我有一个包含两列的数据框。 第一列有一个 id 第二列有词 我想要一个 data.frame 如下 任何帮助,将不胜感激
1回复

用连续值替换 R 中的空单元格(R,循环)

我有一个数据集 df,其中一列包含空白值,我需要填充这些值。 如何使用连续值填充空白的“”字段? (我有一个包含超过 10,000 行的数据集) 这是我想要的输出: 这是我的数据的 dput: 我不确定是否应该使用循环? 我希望替换 "" 的值是连续的。 任何建议都是有帮助的。