运行 通过在 R 中使用 sapply 的数据框

Running through a dataframe with sapply in R

m = data.frame(c(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10),
c("Lozenge","A","Lozenge","A","Lozenge","A","Lozenge","A","Lozenge","A","Lozenge","A","Lozenge","A","Lozenge","A","Lozenge","A","Lozenge","A"),
c("Lozenge","Lozenge","Lozenge","Lozenge","Lozenge","A","A","A","A","A"))

mm = data.frame(unique(m[,1]), 0, 0)
colnames(m) = c("Number","Old","New") 
colnames(mm) = c("Number","Old","New")

我目前有两个不同的数据帧,我想使用 sapply 来遍历 m 个数据帧。用mm的Number,想看一下和m的Number是否匹配。如果是,它将查看并查看单词 "Lozenge" 是否出现在旧列 and/or 新列中。如果是这样,我想在相应的列中以毫米为单位 +1。我一直在玩弄它,但我无法理解它。

这看起来不像是 apply 问题,而更像是一个操作和总结问题。

您真的需要单独的占位符 mm 数据框吗?如果这样做,您可以将此链的结果设置为 mm。

library(dplyr)
library(tidyr)

m %>% 
  gather(condition, value, Old, New) %>% 
  filter(value == "Lozenge") %>% 
  group_by(Number, condition) %>% 
  tally %>% 
  spread(condition, n)

  Number   New   Old
    (dbl) (dbl) (dbl)
1       1     2     1
2       2     2     1
3       3     1     1
4       4     0     1
5       5     0     1
6       6     2     1
7       7     2     1
8       8     1     1
9       9     0     1
10     10     0     1

不清楚预期的输出。 data.table 的可能选项。假设我们要检查 'Old' 或 | any 'New' 中的 any 每个 "Number" 的值是否为 "Lozenge",那么做

library(data.table)
setDT(m)[, Flag := as.integer(any(Old == "Lozenge")|any(New == "Lozenge")) , Number]

或者如果我们只想比较 "Old" 和 "New" 每行的 "Lozenge" 值

setDT(m)[, Flag2 := as.integer(Old == "Lozenge"|New == "Lozenge") ]