我不确定该怎么称呼,所以我会尝试用外行语来描述问题所在。我有一个只包含0和1的数据框。所以对于每个人而不是一个具有事实值的列(例如低价格,4个房间)我有
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19 V20 V21
1 0 0 0 1 0 0 0 1 0 1 0 0 0 0 1 1 0 0 0 1 0
2 1 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 1 0 0 1
3 0 0 0 1 1 0 0 0 0 0 1 0 0 0 1 1 0 0 1 0 0
4 0 0 0 1 0 1 0 0 0 0 1 0 1 0 0 0 1 0 1 0 0
如何在R中转换数据集,以便创建新列(#number of rooms)并将1(在第4列)中的位置赋予vhigh值? 我有多个支出的varibales我需要这样做。 21列表示1000个观察值的6个变量。应该是这样的
PurchaseP. NumberofRooms ...
1. vhigh. 4
2. low. 4
3. vhigh. 1
4. vhigh. 2
这里只为前2个epxlenatory varibales做了,但基本上它重复这样,每个explenatory变量有3-4个可能的因果值。
V1:V4 =购买价格,V5:V8 =房间数量,V9:V11 =楼层,等等
在我看来,这样的事情可以起作用
这会有用吗,还是有更简单的方法?如何在R中编码?
答案 0 :(得分:0)
您可以使用与
类似的函数()lapply(df, function(x) { %now x is a row
idx = which(x == 1)[1]
return(idx)
})
有趣的是,每行使用which(x ==1)
。这将为您提供包含一个索引的所有索引的数组。第一个可以在您的情况下使用(假设您每行只有一个1)否则,需要讨论聚合。然后,通过为各种指数提供合理的名称,可以将生成的列转换为因子。
答案 1 :(得分:0)
如果数据集每行包含1个,这是一个非常简单的问题
根据您的图片显示您的数据(请编辑您的问题以放置代码而不是图片)
var getLink = (str) => {
var matches = str.match(/(?<=(\[|\())([^\])]+)/g);
var aHTML = "";
if (matches && matches.length == 2) {
aHTML = '<a href="' + matches[0] + '">' + matches[0] + '</a>'
}
return aHTML;
};
var replaceInline = (str) => {
return str.replace( /\[[^\]]+\]\([^)]+\)/g, r => getLink(r) );
};
var sample = "Here is a link [url.com](url) inline";
console.log( replaceInline(sample) );
然后,您只需将您的列与房间号码相加作为重量
df = data.frame(r1 = 0, r2 = 1, r3 = 0)
rownames(df)<- 1