我有两个数据帧,列数相同但行数不同:
colA colB colC colD
xxx 303 200 A
yyy 111 20 B
zzz 24 188 C
我需要将colA
中的df1
与colA
中的df2
进行匹配,并仅选择df1$colB - df2$colC <= 2000
我尝试进行for循环,但它不起作用:
for (i in nrow(df1)) {
for (j in nrow(df2)) {
df3 <- subset(merge(df2[j,], df1[i,], by="row.names", all=T), df2$colA[j] == df1$colA[i] && (df1$colB[i] - df2$colC[j]) <= abs(2000))
}
}
我做错了什么?它没有给我任何错误,但新的数据帧是空的。
答案 0 :(得分:0)
如果<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="app.com.thetechnocafe.codelabsmaterialdesign.MainActivity">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
</android.support.v7.widget.Toolbar>
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</android.support.design.widget.TabLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
</android.support.v4.view.ViewPager>
</RelativeLayout>
是一个选项,请尝试以下操作:
dplyr
这将为您提供包含列的框架
df1 %>%
inner_join(df2, by = "colA") %>%
filter(abs(colB.x - colC.y) <= 2000)
其中.x来自df1,而.y来自df2。
另请注意,colA, colB.x, colC.x, colD.x, colB.y, colC.y, colD.y
可能意味着b - a <= abs(2000)