如何在选择性列上使用lappy()R

如何在选择性列上使用lappy()R,r,lapply,R,Lapply,我是一个新手程序员。我想知道如何在数据帧上重叠,但避免某些列 # Some dummy dataframe df <- data.frame( grp = c("A", "B", "C", "D"), trial = as.factor(c(1,1,2,2)), mean = as.factor(c(44,33,22,11)), sd = as.factor(c(3,4,1,.5))) df <- lapply

我是一个新手程序员。我想知道如何在数据帧上重叠,但避免某些列

# Some dummy dataframe
df <- data.frame(
         grp = c("A", "B", "C", "D"),
         trial = as.factor(c(1,1,2,2)),
         mean = as.factor(c(44,33,22,11)),
         sd = as.factor(c(3,4,1,.5)))

df <- lapply(df, function (x) {as.numeric(as.character(x))})
#一些虚拟数据帧

正如你可能猜到的,有很多方法。由于您似乎正在进行就地替换,实际上,for循环是合适的

df <- data.frame(
         grp = c("A", "B", "C", "D"),
         trial = as.factor(c(1,1,2,2)),
         mean = as.factor(c(44,33,22,11)),
         sd = as.factor(c(3,4,1,.5)))

my_cols <- c("trial", "mean", "sd")
for(mc in my_cols) {
    df[[mc]] <- as.numeric(as.character(df[[mc]]))
}

df正如你可能猜到的,有很多方法。由于您似乎正在进行就地替换,实际上,for循环是合适的

df <- data.frame(
         grp = c("A", "B", "C", "D"),
         trial = as.factor(c(1,1,2,2)),
         mean = as.factor(c(44,33,22,11)),
         sd = as.factor(c(3,4,1,.5)))

my_cols <- c("trial", "mean", "sd")
for(mc in my_cols) {
    df[[mc]] <- as.numeric(as.character(df[[mc]]))
}
df尝试这样做:

df[,3:4] <- lapply(df[,3:4], function (x) {as.numeric(as.character(x))})
df[,3:4]尝试这样做:

df[,3:4] <- lapply(df[,3:4], function (x) {as.numeric(as.character(x))})

df[,3:4]如果要按列名进行选择性转换:

library(dplyr)
df %>% 
  mutate_if(names(.) %in% c("mean", "sd"), 
            function(x) as.numeric(as.character(x)))

如果要按列名有选择地进行转换:

library(dplyr)
df %>% 
  mutate_if(names(.) %in% c("mean", "sd"), 
            function(x) as.numeric(as.character(x)))

这是有道理的。有没有一种方法可以说除了x以外的所有列都要这样做呢?这是有道理的。有没有一种方法可以说除了x以外的所有列都要这样做。如果列的位置很奇怪,这有关系吗?只要选择你想要的任何列,例如df[,c(2,4)],如果这些列是曾经需要的typecast。欢迎你。您还可以执行以下操作:
df[,c(“mean”,“sd”)]您可以执行except like命令吗
df[c(“grp”,“trial”),]我喜欢使用
范围
语法回答的原因是它的有用性。假设您有100个列,并且您想要将92个这样的列转换为数字,您可以通过使用它们的索引轻松地做到这一点:
c(1,2,11:100)
。您可以编写任何排除条件,但它们不应位于列名上。啊,好的。如果列的位置很奇怪,这有关系吗?只要选择你想要的任何列,例如df[,c(2,4)],如果这些列是曾经需要的typecast。欢迎你。您还可以执行以下操作:
df[,c(“mean”,“sd”)]您可以执行except like命令吗
df[c(“grp”,“trial”),]我喜欢使用
范围
语法回答的原因是它的有用性。假设您有100个列,并且您想要将92个这样的列转换为数字,您可以通过使用它们的索引轻松地做到这一点:
c(1,2,11:100)
。您可以编写任何排除条件,但它们不应位于列名上。
library(tidyverse);df%>%变异于(2:4,解析号)
库(tidyverse);df%>%在(2:4,解析号)处变异