假设 Dataframe df
如下:
df <- structure(list(date = c("2021-1-1", "2021-1-2", "2021-1-3", "2021-1-4",
"2021-1-5", "2021-1-6"), buy_price_actual = 1:6, call_price_actual = 2:7,
sell_price_actual = 3:8, buy_price_pred = 4:9, call_price_pred = 5:10,
sell_price_pred = 6:11), class = "data.frame", row.names = c(NA,
-6L))
输出:
date buy_price_actual call_price_actual sell_price_actual buy_price_actual.1 call_price_pred sell_price_pred
1 2021-1-1 1 2 3 4 5 6
2 2021-1-2 2 3 4 5 6 7
3 2021-1-3 3 4 5 6 7 8
4 2021-1-4 4 5 6 7 8 9
5 2021-1-5 5 6 7 8 9 10
6 2021-1-6 6 7 8 9 10 11
我想在for循环中提取date
列以及 * buy * 和 * sell * prices的实际值和预测值:
cols <- list(
c("date", "buy_price_actual", "buy_price_pred"),
c("date", "sell_price_actual", "sell_price_pred")
)
for (col in cols){
print(col)
}
for (col in cols){
df1 <- df %>%
select(col)
print(df1)
}
输出:
Error in print.default(m, ..., quote = quote, right = right, max = max) :
invalid printing digits -2147483648
另一种处理方法是通过grep
搜索关键字,并添加date
列:
price_types <- c('buy', 'sell')
for (price_type in price_types){
df1 <- df %>%
select_if(grepl('date'|price_type, names(.)))
print(df1)
}
不过,以上两种解决方案还是存在bug,如何处理呢?谢谢!
2条答案
按热度按时间a6b3iqyw1#
第一个循环失败是因为
df1 <- df %>% select(col) %>% print(df1)
中有一个额外的管道,所以表达式的计算结果是df1 <- print(select(df, col), df1)
,这可能不是您想要的。在第二个循环中,您仍然需要构造一个有效的字符串作为
grepl()
的第一个参数,例如paste0()
:不过,我更愿意用这样的话来代替:
一个二个一个一个
输入:
创建于2023年1月30日,使用reprex v2.0.2
mklgxw1f2#
您可以生成两个名为df_buy和df_sell的 Dataframe ,方法是循环遍历这两个字符串并选择包含该字符串和'date'的列。我们使用
assign()
也根据字符串命名 Dataframe :