R:扩展data.frame值

时间:2016-03-21 13:02:45

标签: r

我有data.frame这样:

df <- data.frame(x = c(998,994,992,990,989,988), y = seq(0.5, 3, by = 0.5))
df

    x   y
1 998 0.5
2 994 1.0
3 992 1.5
4 990 2.0
5 989 2.5
6 988 3.0

我想展开它,因此x中的值恰好相距1,所以最终data.frame看起来像这样:

    x   y
1  998 0.5
2  997 0.5
3  996 0.5
5  995 0.5
6  994 1.0
7  993 1.0
8  992 1.5
9  991 1.5
10 990 2.0
11 989 2.5
12 988 3.0

2 个答案:

答案 0 :(得分:11)

您还可以使用approx

data.frame(approx(df, xout=max(df$x):min(df$x), method="constant", f=1))

     x   y
1  998 0.5
2  997 0.5
3  996 0.5
4  995 0.5
5  994 1.0
6  993 1.0
7  992 1.5
8  991 1.5
9  990 2.0
10 989 2.5
11 988 3.0

答案 1 :(得分:7)

您可以尝试使用包na.locf中的函数zoo

all_values <- max(df$x):min(df$x)
na.locf(merge(df, x=all_values, all=TRUE)[rev(seq(all_values)),])
#      x   y
# 11 998 0.5
# 10 997 0.5
# 9  996 0.5
# 8  995 0.5
# 7  994 1.0
# 6  993 1.0
# 5  992 1.5
# 4  991 1.5
# 3  990 2.0
# 2  989 2.5
# 1  988 3.0

<强> NB

根据@Ananta和@ProcrastinatusMaximus的建议,另一个选项是在fromLast=TRUE调用中设置na.locf(如果您需要按降序排列x,则需要对其进行排序data.frame之后):

na.locf(merge(df, x=all_values, all=TRUE), fromLast=TRUE)