我想创建一个新列,其中x的所有条目都在其中,对于出现在同一行的y列中的那些部分。
data<-data.frame(x =
c("Leo Messi","Frank Ribery","Mats Hummels", "Leo Hummels", "Leo Ribery"),
y = c("Leo", "Ribery", "Mats", NA, "Mama")
)
这是我想要的输出。 列z是x而没有y的条目。 列q是被替换的部分。 重要的是,在第4行中,Leo不会被替换。第1行是列y中的Leo,但这不应该导致替换。
x y z q
1 Leo Messi Leo Messi Leo
2 Frank Ribery Ribery Frank Ribery
3 Mats Hummels Mats Hummels Mats
4 Leo Hummels <NA> Leo Hummels <NA>
5 Leo Ribery Mama Leo Ribery <NA>
答案 0 :(得分:3)
我认为以下内容应该有效。我已经使用了一些包来进行矢量化/效率
var tr = document.createElement("TR");
var td=document.createElement("TD");
txt=document.createElement('SELECT');
txt.style.width = '285px';
txt.maxLength = 50;
var option = document.createElement("option");
option.text = "Larry";
option.value = "10001";
txt.add(option);
var option = document.createElement("option");
option.text = "Nancy";
option.value = "10002";
txt.add(option);
txt.setAttribute("class","form-control");
td.setAttribute("align","center");
td.appendChild(txt);
tr.appendChild(td);
document.getElementById("tblGroup").appendChild(tr);
答案 1 :(得分:0)
试试这段代码:
您的数据
var _this = this
z计算
data<-data.frame(x = c("Leo Messi","Frank Ribery","Mats Hummels", "Leo Hummels", "Leo Ribery"), y = c("Leo", "Ribery", "Mats", NA, "Mama"))
all<-as.character(data$x)
to_sub<-as.character(data$y)
i<-rep(1:length(all))
q计算
f_gsub<-function(x,y,i){ gsub(y[i],"",x[i]) }
data$z<-unlist(lapply(i,f_gsub,x=all,y=to_sub))
data[is.na(data$z),"z"]<-as.character(data[is.na(data$z),"x"])
数据
f_grepl<-function(x,y,i){ grepl(y[i],x[i]) }
sub_YN<-as.logical(unlist(lapply(i,f_grepl,x=all,y=to_sub)))
data$q<-NA
data[!is.na(sub_YN),"q"]<-to_sub[sub_YN]
答案 2 :(得分:0)
以下是使用dplyr
,stringr
和stringi
的解决方案:
library(dplyr)
library(stringr)
library(stringi)
data %>%
mutate_if(is.factor, as.character) %>% # can be avoided if we use stringsAsFactors = FALSE when creating the data frame
mutate(z = str_squish(stri_replace_all_fixed(x, y, "")),
z = case_when(is.na(y) ~ x, TRUE ~ z),
q = case_when(x %in% z == FALSE ~ y))
返回:
x y z q
1 Leo Messi Leo Messi Leo
2 Frank Ribery Ribery Frank Ribery
3 Mats Hummels Mats Hummels Mats
4 Leo Hummels <NA> Leo Hummels <NA>
5 Leo Ribery Mama Leo Ribery <NA>