首页 > 解决方案 > 根据数据类型为 R 中的行分配上一个值

问题描述

我正在尝试在 R 中整理数据框。我的原始数据文件在大量数据框中包含 2 种类型的表,它们由记录指示器 (RI) 值 = 100 或 200 标记。

我的 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 列初始值:

我需要将所有 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]})

标签: r

解决方案


这是我尝试过的。

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

推荐阅读