繁体   English   中英

在 R 中拉出与另一个 dataframe 中的行和列名称匹配的值

[英]Pulling out values that match row and column name in another dataframe in R

我正在尝试采用如下所示的数据框:

desc<- c("a", "b", "c", "d")

df <- data.frame(matrix(ncol = 3 , nrow = 12))

colnames(df)<- c("Date", "Value", "Desc")
df[1:4,'Date'] <- "2017-01-01"
df[5:8,'Date'] <- "2018-01-01"
df[9:12,'Date'] <- "2019-01-01"

df[1:12,'Desc'] <- desc

df[1:12,'Value'] <- seq(1:12)

head(df)

并将其更改为以日期作为列,以“Desc”作为行名的格式,如下所示:

  2017-01-01 2018-01-01 2019-01-01
a         NA         NA         NA
b         NA         NA         NA
c         NA         NA         NA
d         NA         NA         NA

我已经获得了一些 if 循环来设置我的 DF,但我终生无法想到如何提取值并将其放入新的 dataframe。此时任何帮助都将不胜感激。 我也是一名学生,所以如果我错过了发布此内容的任何步骤或以错误的方式发布,我深表歉意。

我的大脑无法思考如何匹配这两个值,然后将其放入正确的 position。

我们可以在base R中使用xtabs

xtabs(Value ~ Desc + Date, df)

-输出

  Date
Desc 2017-01-01 2018-01-01 2019-01-01
   a          1          5          9
   b          2          6         10
   c          3          7         11
   d          4          8         12

不确定这是否在您正在处理的 scope 范围内,但我会为此使用 tidyverse 函数,因为这似乎需要将数据框从长到宽旋转:

install.packages("tidyverse")
library("tidyverse")

df_wide <- df %>%
  mutate(Value = NA) %>%
  pivot_wider(names_from = Date, values_from = Value) 

df_wide
# A tibble: 4 × 4
  Desc  `2017-01-01` `2018-01-01` `2019-01-01`
  <chr> <lgl>        <lgl>        <lgl>       
1 a     NA           NA           NA          
2 b     NA           NA           NA          
3 c     NA           NA           NA          
4 d     NA           NA           NA     

有关 tidyverse 函数的更多信息,请访问: https://www.tidyverse.org

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM