R 需要向数据框添加列。数据位于另一个向量中,仅为一个原始DF列的子集,以供参考
我是R的新手,我请求你的帮助 我有一个数据帧DF,如下所示:R 需要向数据框添加列。数据位于另一个向量中,仅为一个原始DF列的子集,以供参考,r,R,我是R的新手,我请求你的帮助 我有一个数据帧DF,如下所示: user age email address ... user1 20 u1@domain address1 ... user2 19 u2@domain address2 ... user3 30 u3@domain address3 ... ... userm 32 um@domain addressm
user age email address ...
user1 20 u1@domain address1 ...
user2 19 u2@domain address2 ...
user3 30 u3@domain address3 ...
...
userm 32 um@domain addressm ...
...
usern xx un@domain address4 ...
我有一个向量,如下所示:
user1
user3
...
userm
user age email address newcol ...
user1 20 u1@domain address1 yes ...
user2 19 u2@domain address2 no ...
user3 30 u3@domain address3 yes ...
...
userm 32 um@domain addressm yes ...
...
usern xx un@domain address4 no ...
我需要具备以下条件:
user1
user3
...
userm
user age email address newcol ...
user1 20 u1@domain address1 yes ...
user2 19 u2@domain address2 no ...
user3 30 u3@domain address3 yes ...
...
userm 32 um@domain addressm yes ...
...
usern xx un@domain address4 no ...
简而言之,向DF添加一个新列,其中包含no作为默认值,如果对应用户在向量中,则包含yes
任何建议都将不胜感激,
谢谢你抽出时间 这可能不是最有效的例子,但似乎有效:
data<-data.frame(c(1,2,3,4,5),c("a","b","c","d","e"));
colnames(data)<-c("numbers","names");
lookup<-c("a","d","e")
data$newcol<-rep("no",dim(data)[1])
for(i in 1:length(lookup)){
store<-which(data$names==lookup[i])
data$newcol[store]<-"yes";
}
这可能不是最有效的示例,但似乎有效:
data<-data.frame(c(1,2,3,4,5),c("a","b","c","d","e"));
colnames(data)<-c("numbers","names");
lookup<-c("a","d","e")
data$newcol<-rep("no",dim(data)[1])
for(i in 1:length(lookup)){
store<-which(data$names==lookup[i])
data$newcol[store]<-"yes";
}
要进一步阐述Joran的答案: 假设您的data.frame名为df。在data.frame中创建一个名为newcol的新列:
df$newcol <- 'no'
您也可以使用ifelse一步完成此操作:
或者,如果您想变得棘手,可以使用merge…,all=TRUE…来扩展Joran的答案: 假设您的data.frame名为df。在data.frame中创建一个名为newcol的新列:
df$newcol <- 'no'
您也可以使用ifelse一步完成此操作:
或者,如果你想变得棘手,你可以使用merge…,all=TRUE…你可以这样做
DF$newcol <- 'no'
DF$newcol[DF$user %in% newVector] <- 'yes'
还是这样
DF$newcol <- ifelse(DF$user %in% newVector, 'yes', no)
前者的效率惊人地高你可以这样做
DF$newcol <- 'no'
DF$newcol[DF$user %in% newVector] <- 'yes'
vNoYes <- c("No","Yes")# vector with new codes
idx <- (df$user %in% v)+1L# position of codes in data frame
df$newcol <- vNoYes[idx]
还是这样
DF$newcol <- ifelse(DF$user %in% newVector, 'yes', no)
前者的效率惊人地更高您只需使用%in%函数即可
vNoYes <- c("No","Yes")# vector with new codes
idx <- (df$user %in% v)+1L# position of codes in data frame
df$newcol <- vNoYes[idx]
df$newcol <- ifelse(df$user %in% vec, 'yes', 'no')
您只需在%函数中使用%即可
df$newcol <- ifelse(df$user %in% vec, 'yes', 'no')
要检测向量中是否存在值,可以直接合并2个数据帧。在大型数据集中,由于多对多匹配,IFelse语句或%in%语句可能需要更多时间,这一点尤其有用 例如
要检测向量中是否存在值,可以直接合并2个数据帧。在大型数据集中,由于多对多匹配,IFelse语句或%in%语句可能需要更多时间,这一点尤其有用 例如
你在最后一句话中基本上描述了一个完美的解决方案。步骤0:创建一个新的列just no…我将添加到@joran的有用提示中:%in%操作符将一个向量与另一个向量进行比较。一列data.frame只是一个向量。好吧,我来回答!但如果没有以下答案,他们的建议应该足够多:谢谢大家。我缺少的是%中的%。我是从Algol、Fortran、Pascal到R的,现在是php。R对我来说是一种奇怪的动物。你在最后一句话中基本上描述了一个完美的解决方案。步骤0:创建一个新的列just no…我将添加到@joran的有用提示中:%in%操作符将一个向量与另一个向量进行比较。一列data.frame只是一个向量。好吧,我来回答!但如果没有以下答案,他们的建议应该足够多:谢谢大家。我缺少的是%中的%。我是从Algol、Fortran、Pascal到R的,现在是php。对我来说,R是一种奇怪的动物。堆栈溢出通常要求你在答案中给出上下文和解释,如果它们被认为是高质量的。请考虑扩展您的答案。堆栈溢出通常要求您在答案中给出上下文和解释,如果它们被认为是高质量的。请考虑扩大你的答案。