Python数据框处理代码转R出错,求正确转换方案
问题分析与修正
你的R代码核心问题是索引逻辑和Python不匹配(Python是0-based索引,R是1-based),另外还有几处细节错误,以下是修正后的完整代码及对应解释:
原Python代码逻辑回顾
col_names = China_2.columns provinces = col_names[0] # 取第1列(索引0)的列名:省份列 days = col_names[1:] # 取第2列及以后的所有列名:日期列集合 day_1 = days[0] # 日期列集合的第1个元素(原数据第2列) other_days = days[1:] # 日期列集合的第2个及以后元素(原数据第3列及以后) China_dc = pd.DataFrame() China_dc['Province'] = China_2[provinces] # 复制省份列 China_dc[day_1] = China_2[day_1] # 复制第一个日期列的原始数据 China_dc[other_days] = daily_cases # 用daily_cases填充剩余日期列 China_dc.head(3)
修正后的R代码
# 统一变量名大小写(R区分大小写) col_names <- names(China_2) provinces <- col_names[1] # R中第1列对应Python的索引0,这行是正确的 days <- col_names[-1] # 取除第1列外的所有列名,这行本身无错误,问题出在后续索引 day_1 <- days[1] # 对应Python的days[0]:日期集合的第一个元素 other_days <- days[-1] # 对应Python的days[1:]:去掉日期集合的第一个元素,取剩余部分 # 直接初始化DataFrame,无需先填充NA China_dc <- data.frame(Province = China_2[[provinces]], stringsAsFactors = FALSE) # 复制第一个日期列的原始数据 China_dc[[day_1]] <- China_2[[day_1]] # 用daily_cases_df填充剩余日期列(需确保daily_cases_df的行数、列数与目标匹配) China_dc[, other_days] <- daily_cases_df # 查看前3行 head(China_dc, 3)
关键修正点
- 索引修正:将
day_1 <- days[2]改为day_1 <- days[1],因为R的索引从1开始,days[1]对应Python中days[0](日期集合的第一个元素) - 初始化简化:直接用
data.frame(Province = China_2[[provinces]])创建初始数据框,避免多余的NA填充步骤 - 变量名统一:确保
China_2大小写一致(R区分大小写,原代码中同时出现china_2和China_2会报错) - 字符串因子处理:添加
stringsAsFactors = FALSE避免省份列被自动转为因子类型(与Python默认行为一致)
内容的提问来源于stack exchange,提问作者Zavosh Ghorbanpour
相关产品推荐
相关产品推荐

