r - 根据数据类型为 R 中的行分配上一个值
问题描述
我正在尝试在 R 中整理数据框。我的原始数据文件在大量数据框中包含 2 种类型的表,它们由记录指示器 (RI) 值 = 100 或 200 标记。
- RI == 100 对应于重要细节,例如计量单位 (UOM) 和以下序列数据 (RI==200) 的 ID 参考。这些列是 RI、ID 和 UOM。
- RI == 200 对应数据框中我需要的数据。列是 RI、Measure1、Measure2、Measure3 和 Time。请注意,这些长度并不总是相同,因为我可能对某些 ID 有更多历史记录。
我的 df 示例如下所示:
RI Measure1 Measure2 Measure3 Time
100 Scott cm N/A N/A
200 1.6 0.2 1.5 0
200 1.3 0.5 0.6 1
200 8.1 7.5 0.8 2
100 James inches N/A N/A
200 0.1 0.1 0.5 0
200 0.1 0.1 0.3 1
200 0.5 0.5 0.6 2
200 0.1 0.5 0.1 3
我在扩展数据框中添加了 2 列初始值:
- df$ID <- df$Measure1
- df$UOM <-df$Measure2
我需要将所有 RI=200 的值替换为等于前一个值以下拉每行的 ID 和 UOM。
最后,我可以将数据修剪为 df[df$RI==200,]
对于给定的行(条件是 RI==200),如何将 df$ID 和 df$UOM 的值替换为以前的值?
这是我尝试无济于事的:
apply(df[df$RI==200,],1,function(x) {df$ID <-df$ID[-1]})
解决方案
这是我尝试过的。
df=read.table(text="
RI Measure1 Measure2 Measure3 Time
100 Scott cm N/A N/A
200 1.6 0.2 1.5 0
200 1.3 0.5 0.6 1
200 8.1 7.5 0.8 2
100 James inches N/A N/A
200 0.1 0.1 0.5 0
200 0.1 0.1 0.3 1
200 0.5 0.5 0.6 2
200 0.1 0.5 0.1 3", header=T)
f=df$RI
counter=0
for(i in 1:length(f)){
if(f[i]==100) counter=counter+1
f[i]=counter
}
df$f=f
df100=df[df$RI==100,c("Measure1","Measure2","f")]
colnames(df100)=c("ID","UOM","f")
df200=df[df$RI==200,]
dplyr::left_join(df200,df100, by="f")
哪个打印
RI Measure1 Measure2 Measure3 Time f ID UOM
1 200 1.6 0.2 1.5 0 1 Scott cm
2 200 1.3 0.5 0.6 1 1 Scott cm
3 200 8.1 7.5 0.8 2 1 Scott cm
4 200 0.1 0.1 0.5 0 2 James inches
5 200 0.1 0.1 0.3 1 2 James inches
6 200 0.5 0.5 0.6 2 2 James inches
7 200 0.1 0.5 0.1 3 2 James inches
推荐阅读
- mongodb - 覆盖缺失值的mongodb索引
- reset - 如何调整每个标签页的脚本以重置整个页面并仅重置公式和 Dropbox?
- c# - C# 从对象中获取属性值
- snowflake-cloud-data-platform - 爱因斯坦连接到雪花 - JDBC 错误
- excel - 使用新名称保存后 Excel 无法找到文件
- azure - Can't run my build release task on azure release pipeline error 异常:初始化名为“MSTest”的设置提供程序时出错
- r - 如何增加 facet_wrap 中每个图的大小?
- xslt - 基于新值分组
- c# - c# 序列化对象抛出 System.MissingMethodException
- apache-kafka - Kafka集群配置检查