r - 虚拟变量取决于 df$id 列的字符长度

标签 r string-length dummy-variable

我正在尝试在 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 语句:

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

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

如 user20650 的评论中所述,直接修复您的代码:

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

关于r - 虚拟变量取决于 df$id 列的字符长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31104192/

相关文章:

R将字符串转换为时间

使用行索引从数据框中删除行,其中行索引可能为零长度向量

不使用 strlen() 函数计算字符串长度

c++ - 查找字符串的长度

r - 从我的数据框中创建虚拟变量矩阵;使用 `NA` 表示缺失值

随机删除n条边而不断开图

javascript - 将字符串分成两部分,长度几乎相同

python - 当每个观察值都包含可能值的列表时,在 Pandas 中生成许多虚拟变量

R:根据一列值在另一列中的存在性生成虚拟变量

r - 用 Shiny 的 R 设计 DT 中的展开行按钮