我正在使用 R 编辑 GPS 点的 csv。该表看起来有点像这样:
ID DATE 2002.08.01 2002.08.02 2002.08.03 2002.08.04
1 8/1/2002 56 41 54 89
2 8/2/2002 65 59 69 10
3 8/2/2002 66 51 61 5
4 8/3/2002 11 21 12 32
上表中以日期作为列标题的每一列都是该 GPS 点某一特定日期的积雪深度。我想要的是一个新列 SNOW_DEPTH
,只有 具有该 GPS 点的正确日期 的雪深。在我给出的示例数据中,我正在寻找的解决方案是这样的:
ID DATE SNOW_DEPTH
1 8/1/2002 56
2 8/2/2002 59
3 8/2/2002 51
4 8/3/2002 12
请注意,解决方案表中 SNOW_DEPTH
的值是根据该行 的雪深值填充的,但是用于填充的列取决于日期。
我不想按名称列出每一列,因为在我的真实数据中有数千列(所有列都以日期作为列标题)。是否有一个简单的、基于脚本的 R 解决方案来解决我的困境?
最佳答案
这是一个使用 tidyverse
软件包套件的解决方案。请注意,我假设 DATE
存储为字符或因子。
df <- read_table("ID DATE 2002.08.01 2002.08.02 2002.08.03 2002.08.04
1 8/1/2002 56 41 54 89
2 8/2/2002 65 59 69 10
3 8/2/2002 66 51 61 5
4 8/3/2002 11 21 12 32")
library(tidyverse)
df %>%
gather(COL_DATE, SNOW_DEPTH, -ID, -DATE) %>%
mutate( # this converts both `DATE` and `COL_DATE` to the date-time format. If `DATE` is already in this format, skip the first conversion (you still need to convert `COL_DATE`).
DATE = as.Date(DATE,format = "%m/%d/%Y"),
COL_DATE = as.Date(COL_DATE, format = "%Y.%m.%d")
) %>%
filter(DATE == COL_DATE) %>%
select(-COL_DATE)
关于r - 使用不同现有列的值逐行填充新列,使用日期作为选择标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50440372/