r - 比较数据框R中每行的列
问题描述
我有一个包含 3 列和几千行的数据框。现在我想比较每行列中的值,以查看这些值是否遵循特定趋势。
Df <- data.frame(Value1 = c(13,19,56,47,15,13,64, 48), Value2 = c(54,64,11,21,15,48,12,78), Value3 = c(66,78,05,12,21,23,45,30))
在此示例中,数据帧第 1 行将是一个向上的斜坡,而第 3 行将是一个向下的斜坡。
我写了这个 for 循环来遍历整个数据框。
for(row in 1:nrow(Df)) {
if (Df$Value1 > Df$Value2 & Df$Value2 > Df$Value3){
print("Downward slope")
} else if (Df$Value1 < Df$Value2 & Df$Value2 < Df$Value3){
print("Upward slope")
} else if (Df$Value1 > Df$Value2 & Df$Value2 < Df$Value3){
print("Dip")
} else if (Df$Value1 < Df$Value2 & Df$Value2 > Df$Value3){
print("Peak")
}
}
现在这可能已经非常低效了,但它甚至不起作用。运行这个我得到错误:
条件长度 > 1 且仅使用第一个元素条件长度 > 1 且仅使用第一个元素[1]“上坡”
条件长度 > 1 且仅使用第一个元素 条件长度 > 1 且仅使用第一个元素[1]“向上倾斜”
我怎样才能让这样的事情起作用?
解决方案
可能最好使用矢量化ifelse
而不是循环
ifelse(Df[,1] > Df[,2],
ifelse(Df[,2] > Df[,3], 'down', 'dip'),
ifelse(Df[,2] > Df[,3], 'peak', 'up'))
#[1] "up" "up" "down" "down" "up" "peak" "dip" "peak"
推荐阅读
- javascript - 如何在设计部分创建模块并在 Divi 自定义模块的每个模块中编辑标题?
- jmeter - JMeter - 负载测试期间单个 URL 重定向到多个 URL 失败
- ios - Swift Range Slider 与 UISlider 完全一样
- android - 横幅和插页式广告单元无法正常工作
- google-apps-script - 需要工具提示:将 google sheet 现有数据更改为 DataTable
- android - android:如何在 Android Studio 中预览非默认片段 xml
- python-3.x - 没有代码,但出现错误“标识符中的字符无效”
- python - python中的稀疏偏最小二乘回归
- git-bash - GitBash没有输出到控制台
- here-api - HERE 室内定位 API 可以与 BLE 标签一起使用吗?