如何基于列名创建新dataframe?及提取TSLA数据日期至新dataframe的方法
嘿,我来帮你搞定这两个DataFrame处理的问题,都是日常数据分析里的常见场景,咱们一步步来:
1. 如何基于列名创建新的DataFrame?
不管你用基础R还是tidyverse工具,都有直观好用的方法:
- 基础R写法:直接指定要保留的列名即可。假设你的原始数据叫
my_data,想保留"Date"和"Close"这两列,代码如下:
如果是要排除某些列,比如替代你提到的new_df <- my_data[, c("Date", "Close")]my.data[,-(2:6)],也可以用列名精准排除:new_df <- my_data[, !colnames(my_data) %in% c("Open", "High", "Low", "Volume", "Adj.Close")] - tidyverse(dplyr)写法:用
select()函数更灵活易读,适合复杂的列选择逻辑:library(dplyr) # 保留指定列 new_df <- my_data %>% select(Date, Close) # 排除指定列 new_df <- my_data %>% select(-Open, -High, -Low, -Volume, -Adj.Close)
2. 提取TSLA数据的日期并创建带日期的新DataFrame
你说用my.data[,1]得到的是3.8、5.15这类数值,这说明日期其实是你的数据框的行名(rownames),而不是第一列!这是金融数据导入时的常见情况,解决步骤如下:
第一步:把行名转成正式的日期列
先用基础R的方法快速转换:
# 给数据框新增一列Date,值就是原来的行名 my_data$Date <- rownames(my_data) # 清空原来的行名,让数据结构更规范 rownames(my_data) <- NULL
如果用tidyverse的话,rownames_to_column()函数一步到位:
library(tidyverse) my_data <- my_data %>% rownames_to_column(var = "Date")
第二步:创建包含日期和目标数值的新DataFrame
现在Date已经是正式列了,就可以像第一个问题那样选择列:
# 假设你要保留Date和Close列(对应你示例里的5.00、6.08这些数值) new_df <- my_data[, c("Date", "Close")] # 或者用dplyr的链式写法 new_df <- my_data %>% select(Date, Close)
第三步:把日期转成日期格式(关键!方便绘图)
为了后续绘图时x轴能正确识别日期顺序,一定要把Date列转成日期类型:
new_df$Date <- as.Date(new_df$Date) # 用dplyr可以把所有操作串起来 new_df <- my_data %>% rownames_to_column(var = "Date") %>% select(Date, Close) %>% mutate(Date = as.Date(Date))
这样处理完后,你的新DataFrame就会是你想要的格式:
| Date | Close |
|---|---|
| 2010-06-29 | 5.00 |
| 2010-06-30 | 6.08 |
| 2010-07-01 | 5.18 |
之后绘图时直接用Date作为x轴、Close作为y轴就完全没问题啦!
内容的提问来源于stack exchange,提问作者Ole Solheim Salvesen
相关产品推荐
相关产品推荐

