具有以下类型的数据,并希望通过检查NA
行的i-1和i-1行来重新标记其NA
行。
test <- data.frame(sd_value=c(77,18,3,16,32,76),
value=c(5400,6900,7080,1892,4207,4403),
label=c(c("good",NA,"unable"),c("bads",NA,"good")))
> test
sd_value value label
1 77 5400 good
2 18 6900 <NA>
3 3 7080 unable
4 16 1892 bads
5 32 4207 <NA>
6 76 4403 good
我要重新标记NA
行的条件是
在简单图片中:将上一行和下一行的值与NA
行进行比较。如果差异是
上一行或下一行是否良好有一个特殊条件。
>
如果差异i 1标记为良好
和行差异(值)
预期产出
> test
sd_value value label
1 77 5400 good
2 18 6900 unable
3 3 7080 unable
4 16 1892 bads
5 32 4207 eww!
6 76 4403 good
检查差异值i-1和i1
> test%>%
+ mutate(diff_val=c(0,diff(value)), diff_sd_val=c(0,diff(sd_value)))
sd_value value label diff_val diff_sd_val
1 77 5400 good 0 0
2 18 6900 <NA> 1500 -59
3 3 7080 unable 180 -15
4 16 1892 bads -5188 13
5 32 4207 <NA> 2315 16
6 76 4403 good 196 44
免责声明:我使用了我编写的manymodel
(为了节省时间)的开发人员版本。
library(manymodelr)
library(dplyr)
res<-rowdiff(test,"reverse")
names(res)<-c("sd_diff","diff_val")
#if difference between i-1 or i+1 row of NA
#and diff(value) <200 and same as for diff(sd_value) <50 use i-1 or i+1 row's
#label that meets the condition.
#if difference i+1 is labeled good and row diff(value)<200 and
#same as for diff(sd_value)<50 use new eww! label.
df_bound<-cbind(test,res)
df_bound %>%
mutate(label=ifelse(is.na(label) & lead(label,1)=="good","eww",label),
label=ifelse(is.na(label) & lead(diff_val,1)<200,lead(label,1),label))
结果: NAs可以用0代替。sd_diff和diff_val可以去除。
sd_value value label sd_diff diff_val
1 77 5400 good NA NA
2 18 6900 unable -59 1500
3 3 7080 unable -15 180
4 16 1892 bads 13 -5188
5 32 4207 eww 16 2315
6 76 4403 good 44 196
我有两个大约150 MB的大txt文件。我想从file1的每一行读取一些数据,并扫描file2的所有行,直到找到匹配的数据。如果没有找到匹配的数据,我希望将该行输出到另一个文件中。 选项2:使用上面提到的三个读取器对文件1中的每个记录读取文件2 n次。每次读取后,我必须关闭文件并再次读取。我在想最好的办法是什么。我还有别的选择吗
有两个df df1 df2 预期产出: 从数据帧中获取唯一行比较,并在df1中显示唯一列 df1
问题内容: 我正在寻找一个Linux命令行工具来比较两个PDF文件并将差异保存到PDF输出文件中。该工具应在批处理过程中创建diff- pdf。PDF文件是施工计划,因此纯文本比较无效。 就像是: 我发现的大多数工具都将PDF转换为图像并进行比较,但只能使用GUI。 也欢迎任何其他解决方案。 问题答案: 使用(全能的)imagemagick和pdftk分两行完成: 选项-verbose和-debu
问题内容: 我有一个名为team的表,如下所示:我只是在第三列中添加了row_number 当16出现时,则以1开头,而16依次出现,则一一加。结果就像 帮我得到结果。 问题答案: 您可以使用以下查询: 字段标识具有相同值的连续记录的切片(也称为孤岛)。外部查询用于枚举属于切片的每个记录。属于其他切片的记录被分配了值。 演示在这里
问题内容: 我有以下Pandas DataFrame,我想创建另一列来比较col1的前一行,以查看它们是否相等。最好的方法是什么?就像下面的DataFrame。谢谢 问题答案: 您需要使用: 或改为使用,但是在大型DataFrame中,它会稍微慢一些: 时间 :
问题内容: 这是我对源数据的插入语句。 我有我的源数据 该数据已经排序,和。 我正在尝试从中生成此输出: 这是从原始数据得出结果的逻辑: 对于带有,或的每个记录 A* :如果以下记录 B 具有,则: * 如果记录 乙 具有相同的日期部分如 甲 (忽略时间),同时消除记录 甲 和 乙 从结果。这就是为什么删除记录4、5、8和9的原因; 否则,如果记录 B 的值早于记录 A ,则将 A 的值更新为 B