r - 使用不同现有列的值逐行填充新列,使用日期作为选择标准

标签 r csv dataframe

我正在使用 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/

相关文章:

r - ggplot2:用直线连接极坐标中的点2

r - 使用 R Tcl/Tk 的简单对话

r - 从目录中的 csv 列表创建文件

python - fillna() 和 map(dict) 不仅填充 NaN,还填充所有值

python - 如何将列值转换为 DataFrame、Python 中的另一种模式?

python-3.x - 如何将 Pandas 数据帧转换为字节字符串?

r - S4 类 : arguments passed to new() don't go into their slots

R Shiny - 访问我的本地计算机上的应用程序

php - 如何在 php 中打开一个文件

Python-使用凭据从 ftp url 中提取 csv