【问题标题】:Dummy-variable depending on character lengths of df$id column虚拟变量取决于 df$id 列的字符长度
【发布时间】:2015-09-15 05:43:07
【问题描述】:

我正在尝试在 r 中创建一个 id 虚拟对象。情况有点棘手。如果 id 的长度 = 15,我想设置 id1=1,如果长度 =11,我想设置 0(这是唯一的两种情况)。 我尝试了以下代码:

id1 <- ifelse(nchar(as.character(data$id) == "15"), 1,0)

代码可以运行,但是当我查看数据时,我发现生成的所有值都是 1 而不是 0,1。换句话说,我怀疑 ifelse 函数的设置有问题。

我也试过这个:

id1 <- factor(ifelse(nchar(as.character(data$id) == "15"), 1,0))

仍然得到相同的结果。

谁能帮我解决这个问题?

数据是这样的:

id
799679d656c
032a71ce6132f38
b89602494f78508
c817fdde8fd
74e69d6b574
37d4c1ad5e56d06
63d89a0171f
c8bdb87cd537472
bdc09ee5421b1ec
967f47694e6
e4d825005b1
0eb6b851bba
9b27fa6949aaa42
bc82516f141
c4c7f10be01
cb90e05f8a4
cb45e5a890e
a93f57b965d78eb
5e3bb4f29457d75
62aa2cb20a30e07
33e8f2cd8bd
fdecbac8b827917
b51ea777c53d720

【问题讨论】:

  • 可能是括号放错了..ifelse(nchar(as.character(data$id)) == 15, 1,0)
  • 为此,您不需要ifelse as.integer(nchar(as.character(df1$id))=='15')
  • 或者更多代码打高尔夫球+(nchar(as.character(data$id)) == 15)
  • @DavidArenburg; ... 哈,真的 .. 我典型的苏格兰储备
  • @user20650 这可能是苏格兰讽刺吗?我与真正的苏格兰血统相去甚远,但我知道我很讽刺。

标签: r string-length dummy-variable


【解决方案1】:

没有明确的ifelse 声明:

id1 <- (nchar(as.character(data$id)) == 15)+0L

之所以可行,是因为 R 代码简洁,比较运算符 == 无需使用 if 或 else 即可测试两侧的相等性。测试中隐含了 if 语句,将可能冗长的编程任务替换为在 R 中简明执行的任务。(感谢 @DavidArenburg 的零加法)

user20650 的 cmets 中提到的对代码的直接修复:

id1 <- ifelse(nchar(as.character(data$id)) == 15, 1,0)

结果

id1
 #[1] 0 1 1 0 0 1 0 1 1 0 0 0 1 0 0 0 0 1 1 1 0 1 1

【讨论】:

  • 感谢您的帮助。我试过这个但得到以下错误:nchar(data$id)中的错误:'nchar()'需要一个字符向量
  • 创建数据框时参数stringsAsFactors应设置为FALSE。
  • 如果你不能这样做,这也可以data$id &lt;- as.character(data$id)
  • 嗨,我这样做了:id1
  • 您确实意识到这是很久以前在 cmets 中提供的,对吧?在这种情况下,as.integer 在速度和内存方面都更可取。或者只是+,打字更少,速度更快。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-31
  • 1970-01-01
  • 2019-11-27
  • 2022-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多