如何使用dplyr分配返回数据框列

时间:2017-03-30 18:52:07

标签: r dataframe dplyr

我需要使用 <RelativeLayout android:id="@+id/passwordRelativeLayout" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="83" android:gravity="center"> <ImageView android:id="@+id/passwordImageView" android:layout_width="40dp" android:layout_height="40dp" android:adjustViewBounds="true" android:contentDescription="@string/email_ph" android:gravity="center_horizontal" android:src="@mipmap/lock_icon" android:layout_alignParentBottom="true" android:layout_toStartOf="@+id/passwordTextView" /> <TextView android:id="@+id/passwordTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_alignStart="@+id/passwordEditText" android:labelFor="@+id/passwordEditText" android:text="@string/password" android:textColor="@color/white" android:textSize="24sp" /> <EditText android:id="@+id/passwordEditText" android:layout_width="500dp" android:layout_height="45dp" android:layout_alignParentBottom="true" android:layout_alignParentEnd="true" android:layout_below="@+id/passwordTextView" android:layout_gravity="center_horizontal" android:background="@mipmap/text_box_background" android:gravity="center" android:inputType="textPassword" /> </RelativeLayout>\ 修改数据框中的某些列。例如,

dplyr

如何分配回数据框select(mtcars,hp:am)+99

mtcars

会起作用,但它使用绝对索引4:9,我想避免这种情况(这就是我使用mtcars[,4:9]=select(mtcars,hp:am)+99 dplyr操作的原因。)

1 个答案:

答案 0 :(得分:2)

你冷静借用subset()命令中的一些逻辑来获取变量索引列表

varindex <- function(x, select) {
    if (missing(select)) 
        TRUE
    else {
        nl <- as.list(seq_along(x))
        names(nl) <- names(x)
        eval(substitute(select), nl, parent.frame())
    }
}

然后使用它来更新data.frame

cols <- varindex(mtcars, hp:am)
mtcars[,cols] <- mtcars[,cols]+99

如果您想坚持dplyr,正确使用的功能是mutate(),而不是select()。使用

mutate_at(mtcars, vars(hp:am), function(x) x+99)