如何在R中生成并填充DataFrame?替换循环生成的字符串列表
问题:从现有DataFrame生成结构化的排名DataFrame
我现在用这段R代码生成了字符串列表:
for (x in df){ paste(df$name,df$state, df$outcome, sep = " | ") }
输出的列表示例是:
[2] "DOYLESTOWN HOSPITAL | PA | 10.4" [3] "GLENDALE ADVENTIST MEDICAL CENTER | CA | 10.5" [4] "AVERA HEART HOSPITAL OF SOUTH DAKOTA LLC | SD | 10.5" [5] "WATERBURY HOSPITAL | CT | 10.6" [6] "MAIN LINE HOSPITAL LANKENAU | PA | 10.7"
已知class(df)结果是"data.frame",现在不想生成字符串列表,而是要创建一个结构化的DataFrame,预期格式如下:
hospital state rank D W MCMILLAN MEMORIAL HOSPITAL AL 10 ARKANSAS METHODIST MEDICAL CENTER AR 14
求实现方法。
实现方法
你的需求可以直接从原DataFrame提取指定列,再做简单调整即可,无需生成字符串再反向拆分,更高效简洁:
- 提取并重命名列
原DataFrame已经包含name(医院名)、state(州)、outcome(对应rank值)三列,直接选取这三列后重命名为目标格式:
# 提取目标列 result_df <- df[, c("name", "state", "outcome")] # 重命名列 colnames(result_df) <- c("hospital", "state", "rank")
- 调整rank格式(可选)
如果需要把rank的小数(如10.4)转为整数(如10),可以用以下方式处理:
# 直接截断小数转为整数 result_df$rank <- as.integer(result_df$rank) # 或者四舍五入到整数 result_df$rank <- round(result_df$rank)
- 查看结果
运行后直接打印result_df就能得到你要的结构化DataFrame:
print(result_df)
补充说明
你原来的循环属于冗余操作:paste()本身是向量化函数,不需要遍历DataFrame的列执行,重复生成了多次相同的字符串列表。直接操作DataFrame的列才是R的惯用高效写法。
内容的提问来源于stack exchange,提问作者Youssef
相关产品推荐
相关产品推荐

