运行 通过在 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") ]
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") ]