[英]Assign value to a column from another column based on condition
Say that I have a list like this: 说我有一个这样的清单:
> desired <- c("10001", "10004")
And a sample data frame like this: 还有一个示例数据框,如下所示:
> desired_sample_df <- data.frame(geo = rep("other", 30), zip = c(rep(10001:10010, 2), 10011:10020), cbsa = c(rep("NY", 20), rep("CA", 10)))
> desired_sample_df
geo zip cbsa
1 other 10001 NY
2 other 10002 NY
3 other 10003 NY
4 other 10004 NY
5 other 10005 NY
6 other 10006 NY
7 other 10007 NY
8 other 10008 NY
9 other 10009 NY
10 other 10010 NY
11 other 10001 NY
12 other 10002 NY
13 other 10003 NY
14 other 10004 NY
15 other 10005 NY
16 other 10006 NY
17 other 10007 NY
18 other 10008 NY
19 other 10009 NY
20 other 10010 NY
21 other 10011 CA
22 other 10012 CA
23 other 10013 CA
24 other 10014 CA
25 other 10015 CA
26 other 10016 CA
27 other 10017 CA
28 other 10018 CA
29 other 10019 CA
30 other 10020 CA
I would like to overwrite the geo
column with a value from zip only if the value of zip is in the desired
list saved at the start. 仅当zip的值在开始时保存的
desired
列表中时,我才想用zip的值覆盖geo
列。
Here is what I've tried: 这是我尝试过的:
> desired_sample_df$geo[desired_sample_df$zip %in% desired] <- desired_sample_df$zip[which(desired_sample_df$zip %in% desired)]
Warning message:
In `[<-.factor`(`*tmp*`, desired_sample_df$zip %in% desired, value = c(NA, :
invalid factor level, NA generated
> desired_sample_df$geo[desired_sample_df$zip %in% desired] <- desired_sample_df$zip
Warning messages:
1: In `[<-.factor`(`*tmp*`, desired_sample_df$zip %in% desired, value = c(NA, :
invalid factor level, NA generated
2: In `[<-.factor`(`*tmp*`, desired_sample_df$zip %in% desired, value = c(NA, :
number of items to replace is not a multiple of replacement length
One of the problems is that strings in dataframes automatically become factors. 问题之一是数据帧中的字符串会自动成为因素。 Try this:
尝试这个:
desired <- c("10001", "10004")
df <- data.frame(geo = rep("other", 30), zip = c(rep(10001:10010, 2), 10011:10020), cbsa = c(rep("NY", 20), rep("CA", 10)), stringsAsFactors=FALSE)
idx <- df$zip %in% desired
Now you can alter the elements you want by 现在,您可以通过以下方式更改所需的元素
df[idx, ]$geo <- df[idx, ]$zip
Like this? 像这样?
df$geo <- ifelse(df$zip %in% desired,df$zip,df$geo)
where I'm calling your desired_sample_df
, just df
. 在这里我叫你的
desired_sample_df
,只是df
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.