![](/img/trans.png)
[英]Replace all values in a column of one dataframe using values in a row of another dataframe (matching by row name and column name)
[英]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.